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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冷叙辰 中级黑马   /  2013-3-14 19:09  /  1744 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冷叙辰 于 2013-3-15 12:30 编辑

创建线程有两种方式,继承类和实现接口,这两种方式的优缺点是什么,哪种比较好。

点评

对别人的回答一定要有相应的回复,谢谢,还有,如果问题已经解决了,请将分类改为已解决,谢谢  发表于 2013-3-15 08:21

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

7 个回复

倒序浏览
继承有局限,一个线程执行完才执行下一个, 实现接口能抢夺资源,
回复 使用道具 举报
用接口的比较好,你可以去看看高手些的代码都是用接口的,因为这个体现了java的思想,用一个方法将你要执行的代码封装起来,是面向对象的体现。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
第一种方式:使用Runnable接口创建线程


1.可以将CPU,代码和数据分开,形成清晰的模型

2.线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法

3.有利于保持程序的设计风格一致



第二种方式:
1.直接继承Thread类创建对象1.Thread子类无法再从其它类继承(java语言单继承)。

2.编写简单,run()方法的当前对象就是线程对象,可直接操作。


第一种方式不能够独立运行,需要通过调用Thread对象的start()方法来执行线程。

第二种方式可以直接调用创建对象的start()方法执行,因为它本身就是Thread对象的子类。


评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
直接给你理下两者的区别,这样就能很好的了解两者的使用环境的区别了.在不同的题目要求下使用不同的方法,比如继承的成员方法可以是抽象的,也可以是非抽象的,而接口的成员方法必须都是抽象的.当我们需要操作相同具体的方法内容时,用继承就合适.而接口在多实现的情况下应用就比较多了.
A:成员区别
抽象类:构造方法 用于给子类实例化使用。
            成员变量 既可以是常量,也可以是变量。
            成员方法 既可以是抽象的,也可以是非抽象的。
接口:
        成员变量 只能是常量。
         默认修饰符 public static final
        成员方法 只能是抽象方法
         默认修饰符 public abstract
B:继承和实现的区别
        类与类的关系:继承关系。单继承,可以多重继承。
        类与接口的关系:实现关系。可以单实现,也可以多实现。还可以在继承一个类的同时,实现多个接口。
        接口与接口的关系:继承关系。可以单继承,也可以多继承。
C:表述关系不一样:抽象类被继承是"is a"的关系
                         接口被实现是"like a"的关系

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量,而使用实现Runnable接口可以共享实例变量,像火车站卖票程序使用的就是实现Runnable接口的方式。这是最重要的区别。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
由于java仅支持单继承,继承thread类后就不能在继承别的类了,而java支持接口多继承,实现ruannable后,不会影响该类的继承关系。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
谢洋 高级黑马 2013-3-14 21:36:54
8#
不管是使用Runable或者是Thread,都要可以实现数据的共享操作;
当采用Runable时,只不过是可以直共享数据放在Runable的子类对象中实现
如果采用Thread,我们可以把共享数据单独封装到一个类中,同时最好把这个为设为单例,再把共享对象传给Thread 的子类就可以了
对于使用那个更好,不清楚

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

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