方式一:实现Runnable接口
publicclassrunnablestyleimplementsrunnable {
@Override
公共void run (}
system.out.println (run . runnable );
}
publicstaticvoidmain (字符串[ ] args ) {
newthread(newrunnablestyle () ).start );
}
}
继承方式Thread类
publicclassthreadstyleextendsthread {
@Override
公共void run (}
super.run (;
system.out.println(run.thread );
}
publicstaticvoidmain (字符串[ ] args ) {
new ThreadStyle ().start );
}
}
建议:使用Runnable方法创建线程
理由1 )从代码体系结构的角度看,具体任务(run方法)应该与“创建和执行线程机制(Thread类)”断开连接,runnable对象可以断开连接
理由2 )使用继承Thread的方式,每次尝试创建新任务时只能创建新的独立线程,其损失很大。 (例如,从开头创建线程,执行完成后再销毁。 如果线程任务实际上是在run方法中打印一行文本,则线程的实际工作可能没有线程创建销毁那么大。 (使用Runnable重新组合线程池可以大大减少这种损失。
原因继承Thread类后,Java语言不支持双继承,因此无法继承其他类,可扩展性受到限制。 通常优先考虑方法1 (实现1(runnbale接口方式)
源代码中的Run方法:
/* What will be run. */
私有运行目标;
@Override
公共void run (}
if (目标!=空) {
target.run (;
}
}
分析: target对象以我们的构建方式传递,然后初始化。
当我们使用Runnable方法时,target不等于null,然后执行Runnable对象的run方法。
如果使用Thread方法,子类将消除上面源代码的确定过程,并直接通过写有父类的run方法访问。
本质上都是执行我们的run方法,方法之一是在做出判断之后,执行传递的target对象的run方法,方法二是直接执行run方法。
面试:实现线程的两种方法
通常分为两个类别。 Oracle官方文档也是这么说的。 Runable接口和继承Thread类
加分回答:准确地说,只有一种方法可以创建线程,就是配置Thread类。 实现线程执行单元有两种方法
方法一:实现Runnable接口的run方法,将Runnable实例传递给Thread类,在Thread类中进行target判定,然后执行自定义Runnable类的run方法
方法重写Thread的run方法
本文地址: https://blog.csdn.net/Baidu _ 36216018/article/details/108865683
你想和很多网友交流吗?
点击这个留言吧!