A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吹血弄花 中级黑马   /  2014-6-7 15:07  /  2475 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吹血弄花 于 2014-6-8 10:37 编辑

看了两遍视频我还是很不明白什么情况下使用Thread 什么情况下使用Runnable,求兄弟们用大白话详细给我讲一下啊。

2 个回复

倒序浏览
本帖最后由 李小然 于 2014-6-8 15:26 编辑

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

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

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

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

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



评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
基本没区别,自打学了线程,就没在用过继承的方式。
唯一区别是:
继承Thread类:如果一个类有了父类,便没法再继承了
实现Runnale:更灵活,没有单继承的局限。
楼上说的不错:接口本来就是功能的扩展,使用Runnale还可以干别的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马