黑马程序员技术交流社区
标题:
Thread 与 Runnable的区别?
[打印本页]
作者:
kongling
时间:
2013-12-4 17:56
标题:
Thread 与 Runnable的区别?
本帖最后由 kongling 于 2013-12-5 17:44 编辑
Thread 与 Runnable的区别
作者:
关静刚
时间:
2013-12-4 18:16
创建线程有两种方式:继承Thread类和实现Runable接口
创建线程的第一种方式:继承Thread类
步骤:
1,定义类继承Thread
2,复写Thread类中的run方法
目的:将自定义代码存储在run方法,让线程运行
3,调用线程start方法
该方法两个作用:启动线程,调用run方法
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口。
2,覆盖Runnable接口中的run方法。
将线程要运行的代码存放在run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去执行指定对象的run方法
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现Runable接口方式和继承继承Thread类方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时:建议使用实现方式。
作者:
想你的夜
时间:
2013-12-4 20:05
在Java中有两种创建线程的方式,一种是直接继承Thread类,另一种是实现Runable接口的方式。
区别: 1,Thread类是在java.lang包中定义的,任何一个类只要继承了Thread类同时覆写了本类中的
run()方法就可以实现多线程操作。局限性:一个类只能继承一个父类,实际开发中一般使用少
2,定义类实现Runnable接口,覆盖Runnable接口中的run方法,通过Thread类建立线程对象,调用Thread类的start方法开启线程。但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。优点:可以避免上面方法的继承的局限,一个类可以继承多个接口,适合于资源的共享。
总结:从结构上来看,确实第一种比第二种方法要简洁很多,第二种虽然相对复杂些,却可以更优的在实际编程中起作用,所以建议尽量使用实现Runnable接口
作者:
王家胜
时间:
2013-12-5 16:28
本帖最后由 王家胜 于 2013-12-5 16:33 编辑
别看字多,我觉得上面的回答都不好
我来将sun公司原代关键提取出啦
private Runnable target;
public Thread(Runnable target)
{
init(参数1.......);
}
private void init(局部变量)
{
this.target = target;
}
public synchronized void start()
{
start0();//这是jni 最终让操作系统启动一个线程执行 run()
}
public void run()
{
if (target != null)
{
target.run();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2