启动一个线程是用run()还是start()?
来源:互联网 发布:source insight有linux 编辑:程序博客网 时间:2024/05/22 04:57
继承Thread类的启动方式:
public class ThreadStartTest {
public static void main(String[] args) {
ThreadTest tt = new ThreadTest();// 创建一个线程实例
tt.start(); // 启动线程
}
}
实现Runnable接口的启动方式:
public class RunnableStartTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableTest()); // 创建一个线程实例
t.start(); // 启动线程
}
}
实际上这两种启动线程的方式原理是一样的。首先都是调用本地方法启动一个线程,其次是在这个线程里执行目标对象的run()方法。那么这个目标对象是什么呢?为了弄明白这个问题,我们来看看Thread类的run()方法的实现:
public void run() {
if (target != null) {
target.run();
}
}
当我们采用实现Runnable接口的方式来实现线程的情况下,在调用new Thread(Runnable target)构造器时,将实现Runnable接口的类的实例设置成了线程要执行的主体所属的目标对象target,当线程启动时,这个实例的 run()方法就被执行了。当我们采用继承Thread的方式实现线程时,线程的这个run()方法被重写了,所以当线程启动时,执行的是这个对象自身的 run()方法。总结起来就一句话,如果我们采用的是继承Thread类的方式,那么这个target就是线程对象自身,如果我们采用的是实现Runnable接口的方式,那么这个target就是实现了Runnable接口的类的实例。
而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
- 启动一个线程是用run()还是start()? 为什么?
- 启动一个线程是用run()还是start()?
- 启动一个线程是用run()还是start()?
- 启动一个线程是用run()还是start()?
- 启动一个线程是用run()还是start()?
- 启动一个线程是用run()还是start()?
- 启动一个线程是用run()还是start()
- 启动一个线程是用run()还是start()
- 启动一个线程是用run()还是start()? 为什么?
- 启动一个线程是用run()还是start()? 为什么?
- 启动一个线程是用run()还是start()?有什么区别?
- 启动一个线程用run()还是用start()?
- Java 线程启动 run() 还是start() 方法
- 在启动线程时是应该调用线程的run()方法还是start()方法?
- 关于线程启动: start 和 run 区别
- 低级错误折腾了,发现线程启动是start() 不是run()
- 调用run()方法启动线程和start()方法启动线程
- 一次随Tomcat启动一个线程所映射的run()start()区别
- JetSpeed源码分析
- Windox Java 环境设置
- asmcmd cp command on the test with transportable tablespace
- s3c2440中断控制
- 成绩数组程序报告
- 启动一个线程是用run()还是start()?
- Linux programming and system knowledge
- CString 和string 相互转换
- Why does my OSG MFC based application show memory leaks
- 工作中及时沟通很重要
- 在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件
- UML学习笔记(六)【状态图】
- java 防止重复提交
- JVM max thread number