验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

如何创建Java多线程

阅读:241 来源:乙速云 作者:代码code

如何创建Java多线程

在 Java 中,创建多线程主要有 4 种常见方式。下面从最常用到不常用逐步说明,并附示例代码。


一、继承 Thread 类(不推荐)

示例

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程执行:" + Thread.currentThread().getName());
    }
}

public class Test {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 启动线程
    }
}

缺点

  • Java 是单继承,继承 Thread 后不能再继承其他类
  • 不利于资源共享

二、实现 Runnable 接口(✅ 推荐)

示例

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程执行:" + Thread.currentThread().getName());
    }
}

public class Test {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start();
    }
}

优点

  • 解耦任务和线程
  • 适合资源共享
  • 更灵活

三、实现 Callable + Future(有返回值)

示例

import java.util.concurrent.*;

class MyCallable implements Callable {
    @Override
    public String call() throws Exception {
        return "线程执行完成:" + Thread.currentThread().getName();
    }
}

public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService pool = Executors.newSingleThreadExecutor();
        Future future = pool.submit(new MyCallable());

        System.out.println(future.get()); // 获取返回值
        pool.shutdown();
    }
}

特点

  • 可以返回结果
  • 可以抛出异常
  • 适合复杂任务

四、使用线程池(✅ 企业级推荐)

示例

import java.util.concurrent.*;

public class Test {
    public static void main(String[] args) {
        ExecutorService pool = Executors.newFixedThreadPool(3);

        for (int i = 0; i < 5; i++) {
            pool.execute(() -> {
                System.out.println("线程:" + Thread.currentThread().getName());
            });
        }

        pool.shutdown();
    }
}

优点

  • 控制线程数量
  • 提高性能
  • 避免频繁创建销毁线程

五、Lambda 简化写法(Java 8+)

new Thread(() -> {
    System.out.println("Lambda 线程");
}).start();

六、启动线程的正确方式

✅ 正确:

thread.start();   // 启动新线程

❌ 错误:

thread.run();     // 只是普通方法调用

七、总结对比

方式 是否有返回值 推荐程度
Thread
Runnable ⭐⭐⭐
Callable ⭐⭐⭐
线程池 ⭐⭐⭐⭐⭐

八、常见面试问题

  • start()run() 的区别?
  • Runnable 和 Callable 的区别?
  • 为什么推荐线程池?
  • 线程安全如何保证?

如果你愿意,我可以 结合面试角度模拟一个真实业务场景 再详细讲。

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>