Java多线程:继承Thread类 vs 实现Runnable接口的区别
·
一、两种创建线程的方式回顾
// 方式1:继承Thread类
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程执行中...");
}
}
// 启动线程
new MyThread().start();
// 方式2:实现Runnable接口
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("任务执行中...");
}
}
// 启动线程
new Thread(new MyTask()).start();
二、核心区别分析
-
继承与实现的限制
继承Thread:Java是单继承,一旦继承了Thread就无法再继承其他类,扩展性受限。
实现Runnable:可以继续继承其他类,也可以实现多个接口,更加灵活。 -
任务与线程的耦合度
继承Thread:任务和线程绑定在同一个类中,耦合度高,不利于任务复用。
实现Runnable:任务(Runnable)和线程(Thread)分离,同一个任务可以传给多个线程执行,也可以交给线程池。 -
资源共享能力
// Runnable方式:多个线程共享同一个任务对象
MyTask task = new MyTask();
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start(); // t1和t2共享task中的实例变量
// Thread子类方式:每个线程有自己的独立实例,共享需要借助static变量
MyThread t1 = new MyThread();
MyThread t2 = new MyThread(); // 各自独立,不共享
更多推荐
所有评论(0)