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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵红萍 中级黑马   /  2012-10-25 12:46  /  1573 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

创建一个线程可以继承Thread类,也可以继承Runable接口,那么用它们两个创造出的线程会不一样吗?启动线程有一个strat()方法和run()方法,它俩又有什么不同?

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 新人鼓励

查看全部评分

5 个回复

倒序浏览
线程应该是一样的
如果继承Thread类的话,复写了期中的run()可以直接用Thread中的start()直接启动
如果是实现Runable接口的话,复写了期中的run(),还要创建1个Thread类的对象,将实现类作为参数传递给Thread,在调用start()
回复 使用道具 举报
1.继承Thread类,每new一次都是一个新线程的建立;实现Runnable接口,可以只创建一个线程,同时被多方共享。
2.run()方法只是Thread类或Runnable接口中定义的要运行的代码,start()方法是开启线程,并执行run()方法中的内容。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 鲁中需 于 2012-10-25 12:56 编辑

1.实现(接口)方式和继承方式的区别:
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现Runnable方式。

两种方式区别:(代码存放位置不同)
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。

2.启动线程只有一个方法,那就是调用start()方法,这样会启动线程并自动调用run()方法;
而只调用run()方法,仅仅是普通的函数调用,并没有启动线程。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
继承Tread类的方式,通过复写run方法,创建子类对象,然后调用start方法,线程才开启。
实现Runnable接口的方式,要通过复写run方法,创建接口的子类实例对象,然后将Runnable接口的子类对象传递给Tread类的实例对象,然后调用start方法开启线程。

run方法不是开启线程的方法,开启线程的方法是start方法。如果单单只是调用run方法,那么只是通过主函数的线程来执行run方法中的代码而已,而start方法可以开启一个新的线程,来执行run方法中的代码。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
1.java中支持多实现,而不支持多继承。
        如果使用了继承,那么我们程序的可扩展性下降,因为一个类只能有一个父类
        使用实现,我们可以实现多个接口,不影响我们程序的扩展性。
2.关于数据共享
        2.1如果使用继承Thread类来实现数据共享,那么这个数据要static,它的生命周期太长.
        2.2如果使用实现Runnable,这时候只需有一个实现Runnable对象将其传递给
Thread类的构造方法,就可以实现多个线程操作同一个数据。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马