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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SLJ_920808 中级黑马   /  2014-7-11 22:35  /  1399 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 SLJ_920808 于 2014-7-13 13:48 编辑

多线程中实现方式和继承方式有什么区别?

评分

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

查看全部评分

8 个回复

倒序浏览
线程的2种创建方式
   1、继承Thread类,重写run方法。
具体步骤:
  1、定义类继承Thread类
  2、重写run方法
  3、调用start方法开启线程。
   2、实现Runnable接口
     具体步骤:
      1、定义类实现Runnable接口
      2、重写run方法
      3、创建线程对象,将实现Runnable接口的类作为参数传入该线程对象。
      4、调用start方法开启线程。
----------------
实现方式可以多实现,可扩展性强。而继承方式只能单继承,有局限性。所以最好使用实现方式。

评分

参与人数 1技术分 +2 收起 理由
Doraemon + 2

查看全部评分

回复 使用道具 举报 1 0
创建线程的第一种方式:继承Thread ,由子类复写run方法。
步骤:
1,定义类继承Thread类;
2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
3,通过创建Thread类的子类对象,创建线程对象;
4,调用线程的start方法,开启线程,并执行run方法。
创建线程的第二种方式:实现一个接口Runnable。
步骤:
1,定义类实现Runnable接口。
2,覆盖接口中的run方法(用于封装线程要运行的代码)。
3,通过Thread类创建线程对象;
4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。
为什么要传递呢?因为要让线程对象明确要运行的run方法所属的对象。
5,调用Thread对象的start方法。开启线程,并运行Runnable接口子类中的run方法。
为什么要有Runnable接口的出现?
1:通过继承Thread类的方式,可以完成多线程的建立。但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类,因为java单继承的局限性。
可是该类中的还有部分代码需要被多个线程同时执行。这时怎么办呢?
只有对该类进行额外的功能扩展,java就提供了一个接口Runnable。这个接口中定义了run方法,其实run方法的定义就是为了存储多线程要运行的代码。
所以,通常创建线程都用第二种方式。
因为实现Runnable接口可以避免单继承的局限性。

2:其实是将不同类中需要被多线程执行的代码进行抽取。将多线程要运行的代码的位置单独定义到接口中。为其他类进行功能扩展提供了前提。
所以Thread类在描述线程时,内部定义的run方法,也来自于Runnable接口。

实现Runnable接口可以避免单继承的局限性。而且,继承Thread,是可以对Thread类中的方法,进行子类复写的。但是不需要做这个复写动作的话,只为定义线程代码存放位置,实现Runnable接口更方便一些。所以Runnable接口将线程要执行的任务封装成了对象。

评分

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

查看全部评分

回复 使用道具 举报
一种是继续Thread类,另外一种是实现Runable接口。http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html这个地址可以帮助你
回复 使用道具 举报
简单一句话:实现方式避免了单继承的局限性。
回复 使用道具 举报
尽量用接口实现,单继承还是有局限的。
回复 使用道具 举报
我觉得:1、实现避免了继承的局限性。继承只能是单继承,而实现可以有多个。
回复 使用道具 举报
2、实现的方式,是没有自己的start{}
回复 使用道具 举报
路过  学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马