黑马程序员技术交流社区

标题: 关于多线程问题 [打印本页]

作者: 吹血弄花    时间: 2014-6-7 15:07
标题: 关于多线程问题
本帖最后由 吹血弄花 于 2014-6-8 10:37 编辑

看了两遍视频我还是很不明白什么情况下使用Thread 什么情况下使用Runnable,求兄弟们用大白话详细给我讲一下啊。
作者: 李小然    时间: 2014-6-7 18:18
本帖最后由 李小然 于 2014-6-8 15:26 编辑

第一种情况,继承Thread类而言:
   你需要重写run方法。
第二种情况,实现Runnable接口:
   你仍然需要重写run方法。

看似相似,其实是有区别的。

对于第一种情况,要从继承说起。
既然选择继承,就是认了一个爹。所有爹身上的属性都会被继承
自己也成为了Thread的儿子
做一个不是那么恰当的比喻,我的类有100个方法,只有1个需要在多线程中运行。
我就继承了Thread,并且将这一个方法放在run中。
对于剩下的99种方法而言,为什么要继承Thread,干嘛要和你Thread有子父类的关系?
这从逻辑上就说不过去。

但是如果选择第二种情况,只实现Runnable接口,就将一个方法放在run中
剩下的方法干干净净,和别人没有任何联系
这样逻辑上才比较顺畅。

所以,如果你写一个纯粹的类,
全部的方法都是为了在多线程上运行,都要放在run中,
那么这两种方法差不错,推荐第一种继承。
如果你写的类还有别的功能不需要多线程,
那么就推荐第二种实现。
楼下说的也非常对,第二种写法防止了多继承的限制!




作者: 谭荣强    时间: 2014-6-8 03:53
基本没区别,自打学了线程,就没在用过继承的方式。
唯一区别是:
继承Thread类:如果一个类有了父类,便没法再继承了
实现Runnale:更灵活,没有单继承的局限。
楼上说的不错:接口本来就是功能的扩展,使用Runnale还可以干别的.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2