黑马程序员技术交流社区

标题: 关于创建线程的两种方式的区别 [打印本页]

作者: 世界公民    时间: 2013-6-18 09:41
标题: 关于创建线程的两种方式的区别
  1. Thread thread1 = new Thread(){
  2.                         @Override
  3.                         public void run() {
  4.                                 System.out.println("线程1");
  5.                         }
  6.                 };
  7.                
  8.                 Thread thread2 = new Thread(new Runnable(){
  9.                         @Override
  10.                         public void run() {
  11.                                 System.out.println("线程2");
  12.                         }
  13.                 });
复制代码
这两种方法的区别是什么啊???
会不会在性能上有区别呀。
作者: 姚志远    时间: 2013-6-18 09:58
一个是继承Thread子类
一个是实现Runnable 接口
后者比前者更易扩展。
且继承Thread子类的话实现方法要放在Thread 子类的run方法中。
而实现Runnable 接口的话实现方法放在实现Runnable的run方法中。
作者: pys200603027    时间: 2013-6-18 10:04

使用Runnable接口创建线程

1.可以将CPU,代码和数据分开,适合多个相同程序代码的线程去处理同一资源的情况,
当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码

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

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

  直接继承Thread类创建对象

1.Thread子类无法再从其它类继承,因为java是单继承。

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

在实际应用中,几乎都采取实现Runnable接口的方式
作者: 沐有鱼丸    时间: 2013-6-18 10:16
创建线程的两种方式:
1.继承Thread类,并覆写run()方法。
2.实现Runnable接口,并覆写run()方法。
两者都必须通过  .start()启动线程,因为java是单继承的,继承Thread类的时候会不方便扩展,比如你有一个Student类继承了Thread类,以后你想把Student类中的一些属性,比如name、age,抽象成Person类,而Student类已经继承了Thread类,此时就不方便扩展了。如果实现Runnable接口,就可以避免这个限制,因为java支持一个类实现多个接口。
另外实现Runnable接口比继承Thread类更容易解决资源共享的问题,在Runnable子类中定义的成员变量可以直接被他的子线程共享,如果使用Thread类,就必须把这个变量声明为static才行。
作者: Renica    时间: 2013-6-18 10:54
这个貌似毕老师讲过吧
作者: 张承富    时间: 2013-6-18 12:29
一种是扩展java.lang.Thread类
另一种是实现java.lang.Runnable接口

区别就是:第一种是扩展,第二种是实现
好处就是:
在实际开发中通常以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类可以避免继承的局限,一个类可以继承多个接口,适合于资源的共享。
作者: 月时微    时间: 2013-6-18 12:58
、当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,
2、java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了,在其他的方面,两者之间并没什么太大的区别。
3、implement Runnable是面向接口,扩展性等方面比extends Thread好。
4、使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 Thread 来得紧凑。

实现Runnable接口相对于继承Thread类来说,有如下的显著优势:
   1.适合多个相同代码的线程去处理同一个资源的情况
   2.可以避免由于java的单继承特性带来的局限
   3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据时独立的


作者: 袁梦希    时间: 2013-6-18 13:27
加油楼主
作者: 世界公民    时间: 2013-6-18 17:52
谢谢大家!!!现在非常明白了{:soso_e113:}
作者: 孙百鑫    时间: 2013-6-22 02:08
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2