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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hubby 中级黑马   /  2013-11-14 11:36  /  1221 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

创建多线程可以继承一个Thread类,也可以实现一个Runnable接口,我想问一下都是创建多线程,这有什么区别?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 linjl_ll 于 2013-11-14 11:48 编辑

首先在启动线程上有一些区别,Thread子类本身就代表线程,所以可以直接调用子类对象的start方法,
Runnable接口的对象它本身不代表一个线程,启动时需要借助一个Thread类启动,Thred t = new Thread(runnable) t.start();

使用线程子类时只能启动一次线程就是只能调用一次start方法,而通过接口的话,可以创建多个thread启动多个runnable的线程。

你可以假设下,如果没有runnable的实现方式,那么线程只能通过thread的子类实现,但我们知道java中只有单继承,所以该类就不能继承其他的类了,这就给程序的扩展性带来了很大的局限性,runnable的出现就解决了这样的问题,现在实现多线程的话一般都是使用runnable接口实现,基本不用thread的子类。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 答得不错

查看全部评分

回复 使用道具 举报 1 0
因为Java只有单继承,一个类只能继承一个父类,这就是Therad的局限。

而使用Runnable接口可以避免点继承的局限,因为一个类可以实现多个接口。
更适合于适合于资源的共享

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
Java是单继承,如果现在你有一个人你既想让他继承一个类又想让他继承线程,这个时候就得用java的接口了。所以这就提现了Runnable接口的用意了。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马