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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊飞 中级黑马   /  2013-12-17 21:14  /  1082 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Thread和Runnable创建线程,有何区别?

4 个回复

倒序浏览
这是创建线程的两种方法:
第一种方法:创建线程的第一种方式:继承Thread类。
步骤:
1.定义类继承Thread
2.复写Thread类中的run方法
3.调用线程的start方法,该方法有两个作用:
     ①启动线程,②调用run方法

第二种:
创建线程的第二种方式:实现Runnable接口

步骤:
1.定义类实现Runnable接口
2.覆盖Runnable接口中的run方法
    将线程要运行的代码存放在该run方法中。

3.通过Thread类建立线程对象
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
    为什么要将Runnable接口的子类对象传递给Thread的构造函数。
     因为,自定义的run方法所属的对象是Runnable接口的子类对象。
     所以要让线程去执行指定对象的run方法。就必须明确该run方法所属的对象。

5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。


两种方式的区别:
继承Thread:线程代码存放Thread子类run方法中。  //这个比较单一只能通过继承实现
实现runnable,线程代码存放在接口的子类的run方法中。 //这个非继承关系也能实现多线程,只要满足 实现多线程的条件即可

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
public class Threadextends Object implements Runnable   Thread实现了Runnable
使用Runnable比使用有两点好处
一  仍然可以继承一个别的类 使用Thread不能再继承别的类了
二 适于共享资源         
例 Class MyRunnable implements Runnable{

}
MyRunnable r=new MyRunnbale();
new Thread(r).start();    new Thread(r).start();   这两个线程使用的都是r的资源,如果使用Thread虽然也可以,但没有这么方便。

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
简单说:
Thread只能继承一个,当你要继承别的时候你就不能继承它了
Runnable是一个接口,可以无限制实现。

实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
继承Thread:线程代码存放Thread子类run方法中-------------1
实现runnable,线程代码存放在接口的子类的run方法中------2
这两者线程代码存储的位置不一致。
另外,实现方式避免了单继承的局限性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马