Java中使用Thread类和Runnable接口实现多线程的区别
使用Thread类和Runnable接口实现多线程的区别
先看两种实现方式的步骤:
public class ThreadDemo{
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
//创建并启动由继承Thread类创建的线程
new Thread(new MyThread(),"Thread"+i).start();
//创建并启动由实现Runnable接口创建的线程
new Thread(new Runner(),"Thread"+i).start();
}
}
}
//继承Thread类
class MyThread extends Thread{
//重写run方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"由继承Thread创建");
}
}
//实现Runnable接口
class Runner implements Runnable{
//实现run方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"有实现Runnable接口创建");
}
}从上面代码可以看出,当使用Runnable接口创建多线程时,需要将实现类作为参数出入到Thread实例对象中,通过调用Thread对象的start方法进行启动。我们来看一下Thread的源码
//Thread类继承了Runnable类
public class Thread implements Runnable {}
//Thread的构造函数调用了init方法
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
//init调用了静态方法init
private void init(ThreadGroup g, Runnable target, String name,
long stackSize) {
init(g, target, name, stackSize, null, true);
}
//再看静态方法init
private void init(ThreadGroup g, Runnable target, String name,
long stackSize, AccessControlContext acc,
boolean inheritThreadLocals) {
...
//私有Runnable实例
this.target = target;
...
}
//再看一下Runnable方法
@Override
public void run() {
if (target != null) {
target.run();
}
}
从以上追踪源码过程可以看出,Thread类实现了 Runnable 接口,而继承Thread类重写 run 方法本质就是实现Runnable接口的 run 方法。
通过以上分析,总结使用 Thread 类和 Runnable 接口的区别:
- 使用继承 Thread 类实现多线程相比于 Runnable 更加简单,使用 Runnable 接口需要使用 Thread进行再次封装。
- 由于 Java 中不支持多继承,一个类继承了 Thread 类后无法再继承其他类,因此使用 Runnable 接口实现多线程有更好的灵活性。
除了以上两种多线程实现方式,还可以使用 Callable 接口实现,我写了一篇关于 Callable 和 Runnable 接口实现多线程对比的总结:
到此这篇关于使用Thread类和Runnable接口实现多线程的区别的文章就介绍到这了,更多相关Thread类和Runnable接口实现多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java中HashMap和Hashtable及HashSet的区别
以下是对Java中HashMap和Hashtable及HashSet的区别进行了详细的分析介绍,需要的朋友可以过来参考下2013-09-09
java线程池ThreadPoolExecutor的八种拒绝策略示例详解
ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当池子体积不够承载时,就涉及到拒绝策略。JDK中已预设了 4 种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景以及还能扩展哪些拒绝策略2021-11-11


最新评论