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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏浩 中级黑马   /  2014-10-20 21:32  /  2097 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

创建线程的方式:
   new Thread(); 和 new Thread(new Runnable()) 这两种方式有什么区别

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

15 个回复

倒序浏览
一种是继承Thread,一种是实现Runnable接口,第二种较好,避免了java单继承的局限性
回复 使用道具 举报
继承Thread子类无法再从其它类继承
实现Runnable接口可以从其它类中继承一些有用的属性和方法

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
方式1 Thread():
                1. 自定义一个类继承Thread.
                2, 重写Thread的run方法。 把自定义线程的任务定义在run方法中。
                3.创建Thread的子类对象,并调用start方法启动线程。线程就会执行run方法中的代码。

方式2 Runnable()实现类方法:
                1. 自定义一个类实现Runnable接口。
                2. 实现Runnable接口 的run方法,把自定义线程的任务定义在run方法上。
                3. 创建Runnable实现类的对象、
                4. 创建Thread类的对象,然后把Runnable实现类的对象作为参数传递进去.
                5. 调用Thread类对象的start方法开启线程执行任务。
回复 使用道具 举报
我也感觉,原理差不多。不过继承变接口,光这一点Runnable就牛逼多了
回复 使用道具 举报
继承Thread类时,线程的执行代码是放在Thread子类的run方法中的,而且由于JAVA不支持多继承,此子类就只能继承Thread类。
实现Runnable接口时,线程的执行代码是放在接口的子类的run方法中的,而且避免了单继承的局限性,可以继承其他父类的同时实现Runnable接口。
回复 使用道具 举报
一楼正解。
回复 使用道具 举报
uoyouwy 初级黑马 2014-10-21 06:33:43
8#
看到上面的解释,又一次加深了我的印象,为了感谢楼主,总要表示一下,纯手打
回复 使用道具 举报
zhappy 中级黑马 2014-10-21 08:26:06
9#
用实现接口的方法,可以间接实现Java的多继承。
回复 使用道具 举报
实现Runnable接口,是为了得到run方法。而继承了Thread类,虽然得到run方法,却多得到了其他不需要的方法。
想要啥方法,就取得啥方法
回复 使用道具 举报
郑飞 高级黑马 2014-10-21 09:39:03
11#
继承线程一般都是反问自身对象的数据
实现接口访问外部数据很方便
所以共享数据基本用后者
回复 使用道具 举报
这个理解了线程的基本原理就行了吧, 开发根据的需求来吧,看你面对的程序结构,需求是什么, 大多数情况是用后者,大大提高了程序的扩展性,
回复 使用道具 举报
雪人 中级黑马 2014-10-21 10:38:59
13#
没啥区别...都是弄个子线程...看你喜欢用哪个了而已...
回复 使用道具 举报
说的都不够准确,第一种继承Thread类,没new一个便产生一个线程,不够好,因为线程过多,资源消耗也过多,而且容易出现安全问题。第二种实现runnable接口,只需把子类对象传递给线程对象,虽然可以实现多个接口。避免了单继承,但仍然不是最好的方式。第三种,定义一个线程池,此方法最好。因为线程的数量是固定的,一个对象请求服务结束,线程不会消失,成为空线程等待下一个请求服务。减少了操作系统中的并发线程的数量,从源头上减少了资源消耗与多线程安全问题发生的几率。
回复 使用道具 举报
继承创建一个线程就会产生一个新的对象,实现是多个线程可以操作同一个对象,具体看看这两种方法的创建线程的代码方式。
回复 使用道具 举报
接口可以多实现  但是继承只能继承一个  Thread扩展性不高ad
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马