`
Neil_yang
  • 浏览: 130109 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

实现Runnable为什么比继承Thread好

    博客分类:
  • JAVA
阅读更多

这个问题是个常规问题,所以它的常规答案就是:在JAVA语言中类和类之间是单继承的,而接口和接口之间是多继承的.也就是说,如果你继承了Thread类之后就再也不能继承其他的类了,这在实际开发中是相当不方便的.而实现Runnable接口就不会有这个麻烦了,因为接口是多继承的,你实现一个接口之后只要你需要就可以继续实现其他的接口而没有任何限制.从这一点上来说,实现Runnable比继承Thread要好许多

 

Runnable接口只有一个方法,那就是run( ),但是如果你想对它做一些Thread对象才能做的事情(比方说toString( )里面的getName( )),你就必须用Thread.currentThread( )去获取其reference。Thread类有一个构造函数,可以拿Runnable和线程的名字作参数。

如果对象是Runnable的,那只说明它有run( )方法。这并没有什么特别的,也就是说,不会因为它是Runnable的,就使它具备了线程的先天功能,这一点同Thread的派生类不同的。所以你必须像例程那样,用Runnable对象去创建线程。把Runnable对象传给Thread的构造函数,创建一个独立的Thread对象。接着再调用那个线程的start( ),由它来进行初始化,然后线程的调度机制就能调用run( )了。

Runnable interface的好处在于,所有东西都属于同一个类;也就是说Runnable能让你创建基类和其它接口的mixin(混合类)。如果你要访问其它东西,直接用就是了,不用再一个一个地打交道。但是内部类也有这个功能,它也可以直接访问宿主类的成员。所以这个理由不足以说服我们放弃Thread的内部类而去使用Runnable的mixin。

Runnable的意思是,你要用代码——也就是run( )方法——来描述一个处理过程,而不是创建一个表示这个处理过程的对象。在如何理解线程方面,一直存在着争议。这取决于,你是将线程看作是对象还是处理过程[68]。如果你认为它是一个处理过程,那么你就摆脱了"万物皆对象"的OO教条。但与此同时,如果你只想让这个处理过程掌管程序的某一部分,那你就没理由让整个类都成为Runnable的。 

 

 

简单的说:Thread要继承,这样的话你就不可以继承其他的类了。
Runnable只需要实现,你同时可以继承其他的类,也可以实现其他的类。
其实 他们的功能是一样的。 

 

 

 实现Runnable比继承Thread好?
没有这么绝对吧。

你在做项目的时候,有的时候你必须要实现Runnable,而不能继承Thread。

原因很简单,因为java中,一个对象不能继承两个类,所以这个时候你只能去实现Runnable。

我在大多数时候都是继承Thread,感觉操作直来简单,好理解。

 

 

 

其实就是CPU与代码和数据分离的思想,Thread是CPU,Runnable是执行的代码。

分享到:
评论

相关推荐

    实现Runnable接口和继承Thread类两种方式实现在屏幕上随机画正方形线程程序

    **二、继承Thread类** 1. 创建一个继承`Thread`的类,如`RandomSquareThread`,并重写`run()`方法。 ```java public class RandomSquareThread extends Thread { @Override public void run() { // 实现画随机...

    Java中继承thread类与实现Runnable接口的比较

    Java 中继承 Thread 类与实现 Runnable 接口的比较 在 Java 中,创建线程有两种方式:继承 Thread 类和实现 Runnable 接口。这些方式都可以用来创建线程,但它们之间有着一些关键的区别。 继承 Thread 类 继承 ...

    实现Runnable接口的小程序

    Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本篇文章将深入探讨通过实现Runnable接口来创建线程的方法,以及这种方式相比于直接继承Thread类的优势。 首先,我们来看Runnable接口。在...

    实现Runnable接口创建多线程.docx

    在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...

    Java中Runnable和Thread的区别

    ### 继承Thread类 #### 实现方式 当一个类继承`Thread`类时,它必须重写`Thread`类中的`run()`方法,该方法包含了线程执行的主体逻辑。`Thread`类在`java.lang`包中定义,提供了一系列与线程生命周期管理相关的功能...

    多线程的Runnable_和thread有什么区别

    #### 一、继承Thread类 1. **定义**: - `Thread`类位于`java.lang`包下,它提供了一种创建线程的方式。 - 要使用这种方式,需要创建一个`Thread`类的子类,并重写其`run()`方法。 2. **示例代码**: ```java ...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程.pdf

    在Java编程语言中,创建多线程有两种主要的方法:继承`Thread`类和实现`Runnable`接口。这两种方法都是为了使程序能够同时执行多个任务,从而提高效率和响应性。 **1. 继承Thread类** 当一个类直接继承自`Thread`类...

    Java多线程-创建多线程的基本方式二:实现Runnable接口

    - **创建Runnable实现类的实例**:通过实例化这个实现类,为后续创建`Thread`对象做准备。 - **启动线程**:创建`Thread`对象,将`Runnable`实现类的实例作为参数传递给`Thread`的构造函数,然后调用`Thread`对象...

    java线程_Thread_Runnable

    Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    这两种方法都可以实现阶乘计算的多线程化,主要区别在于继承`Thread`时,线程行为直接与类绑定,而实现`Runnable`接口时,线程行为是通过对象实例传递的。选择哪种方式取决于具体需求和设计考虑,例如是否需要复用类...

    认识Thread和Runnable

    继承 Thread 类或者实现 Runnable 接口可以实现多线程。Runnable 接口建议使用,因为它可以实现多继承,并且只有一个 run 方法,很适合继承。 在使用 Thread 时,只需继承 Thread,并且 new 一个实例出来,调用 ...

    Java面向对象程序设计-并发(实现Runnable接口).pptx

    实现Runnable接口需要创建一个Thread类的实例,并将Runnable对象传递给Thread的构造函数。然后,调用Thread的start()方法来启动线程。 下面是一个实现Runnable接口的示例代码: ```java public static void main...

    java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

    在Java中,创建多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方式都是为了实现程序的并发执行,即允许多个任务在同一时间片内交替执行。下面我们将详细讨论这两种方法及其区别。 ### 继承...

    Java多线程技术 线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口

    1. **继承Thread类** - **步骤**: 1. 定义一个类继承自`Thread`。 2. 重写`run()`方法,编写线程体代码。 3. 创建该类的实例,并调用`start()`方法启动线程。 - **示例代码**: ```java class MyThread ...

    Java中Runnable和Thread的区别分析.rar

    - `Runnable`:当一个`Runnable`实例被多个`Thread`共享时,可以更好地实现内存共享,因为它们都引用同一个实例,从而共享同一块内存空间。 - `Thread`:每个`Thread`对象都有自己的堆栈,如果每个`Thread`都包含...

    java实现Runnable接口适合资源的共享

    Java 中创建线程通常有两种方式:继承 Thread 类和实现 Runnable 接口。虽然继承 Thread 类可以创建线程,但是在实际开发中,更常用的是实现 Runnable 接口。为什么呢?这是因为 Java 中一个类可以实现多个接口,但...

    JAVA多线程Thread和Runnable的实现

    **继承Thread类** 当一个类直接继承自`Thread`类时,这个类本身就成为一个线程实体。你可以重写`run()`方法来定义线程执行的任务。例如,`OneThread`类就继承了`Thread`,并在`run()`方法中实现了线程的具体操作。...

    implements Runnable

    在Java中,线程是程序执行的最小单位,而创建线程主要有两种方式:继承Thread类和实现Runnable接口。本项目是一个Java小游戏,核心功能是键盘打字练习,允许用户根据屏幕显示的字符进行快速输入,以提升打字速度,...

    java多线程、通信机制、Thread类以及Runnable接口间的使用实例

    1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。

Global site tag (gtag.js) - Google Analytics