`
yechw
  • 浏览: 59261 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

有了Thread,为什么还要有Runnable?

阅读更多

有了Thread,为什么还要有Runnable?
1、为多继承提供可能。
对于类继承,java只允许单继承模式,如果你需要设计一个类既继承业务类拥有某个业务类功能,又继承线程对象Thread类具有多线程的功能,那么Thread类就无法满足你的要求。这时候就要选择Runnable。更多的接口优于抽象类的内容可参考《Effect Java》中的第16条原则,这里不赘述。

2、实现数据的共享。
首先我们知道,Thread线程对象调用run()方法是采用回调的机制。其次,每个Thread线程对象只能调用一次start方法启用一个线程。因此,把数据放在Thread对象中,并不能被多个线程所共享。

例:

class T extends Thread {
    Object o;
    public void run() {......}
}

T t = new T();
 



实例t所包含的数据对象o只能被实例t共享,当调用t.start()时,只有启用的线程能访问这个数据,即“一个数据实例对应一个线程”。

一种改进方法是从外部传入数据

class T extends Thread {
    Object o;

    public T(Object o) {
        this.o = o;
    }

    public void run() {......}
}
 


这样我们就可以生成一个对象并传给多个Thread对象,实现多线程操作一个数据。

当然java为我们提供了Runnable接口,就很好的解决了这个问题。我们把要操作的数据封装入Runnable的实现类中,然后将Runnable实例传入多个Thread对象中,就可以实现一个对象数据在多个线程的共享了。

Class R implements Runnable {
    Object o;
 
    public void run() {......}
}

Runnable r = new R();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
 

 

分享到:
评论

相关推荐

    JAVA面试题

    使用Thread类和实现Runnable接口的方式。 - 线程同步的方法有哪些?synchronized关键字、wait()和notify()方法、ReentrantLock等。 - 什么是死锁?如何避免? 8. **IO流** - 流的分类有哪些?根据数据流向分为...

    Java并发基础.docx

    另一种方式是实现`Runnable`接口,然后将其实例传递给`Thread`类的构造函数。这样可以避免由于Java单继承特性导致的局限性。例如: ```java public class Task implements Runnable { public void run() { for ...

    java多线程学习

    了解了创建线程的两种基本方式之后,还要注意到继承Thread类和实现Runnable接口之间的区别。继承Thread类的方式因为子类会继承父类的所有属性和方法,这可能导致子类无法继承其他的类。而实现Runnable接口的方式则...

    200道java实用面试题

    Java 中实现多线程有两种主要方式:继承 Thread 类和实现 Runnable 接口。继承 Thread 类时,需要重写 run() 方法,然后创建 Thread 对象并调用 start() 方法启动线程。实现 Runnable 接口则需要重写 run() 方法,...

    一个简单的多线程例子,启动线程与终止线程。

    在Java中,有两种主要的方法来创建线程:通过继承Thread类或实现Runnable接口。在这个例子中,可能会使用到后者,因为这样可以避免单继承的限制。当实现Runnable接口时,我们需要重写run()方法,该方法包含了线程要...

    2021最新必看的Java面试题.docx

    Java 中实现多线程主要有三种方式:继承 Thread 类、实现 Runnable 接口和实现 Callable 接口。7. Java 中的垃圾回收机制GC是什么?Java 的垃圾回收机制(Garbage Collection,简称 GC)是一种自动的内存管理机制,...

    2013年java笔试题大集合及答案

    1. 创建线程的两种方式:实现Runnable接口和继承Thread类。 2. 同步机制,如synchronized关键字、wait()、notify()和notifyAll()的用法。 3. 线程池的概念,为什么要使用ExecutorService? 七、JVM与内存管理 理解...

    java面试题及答案

    - **A:** 可以直接继承Thread类或实现Runnable接口,后者更常见,因为Java不支持多重继承,可以避免类层次结构的限制。 5. **异常处理** - **Q:** try-catch-finally语句块的执行顺序是什么? - **A:** 先执行...

    java线程入门,java线程入门

    接着,使用Thread类的构造函数创建线程对象,并将Runnable实例作为参数传递。 ```java class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } Thread thread = new Thread(new ...

    超级有影响力霸气的Java面试题大全文档

    为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域...

    java自己收集的常用面试题

    可以通过实现Runnable接口或继承Thread类。 - 什么是线程同步?如何实现?线程同步用于控制多个线程对共享资源的访问,Java提供了synchronized关键字、wait()、notify()和Lock接口等同步机制。 5. **IO流** - ...

    java线程内部类练习.rar

    Java提供了两种方式来创建线程:继承Thread类或实现Runnable接口。继承Thread类时,我们需要重写Thread类的`run()`方法,并创建Thread对象来启动线程。而实现Runnable接口则更灵活,因为它允许我们避免了Java的单...

    Java 实例 - 查看线程优先级源代码+详细指导教程.zip

    默认情况下,主线程的优先级为5(`Thread.NORM_PRIORITY`)。线程的优先级可以影响它们被调度执行的频率,但并不能保证高优先级的线程一定先于低优先级的线程运行,因为这还要取决于操作系统的具体实现。 1. **线程...

    创建并运行一个java线程方法介绍

    在Java中,线程的创建和运行可以通过两种主要方式实现:继承`Thread`类或者实现`Runnable`接口。 首先,我们来看如何通过继承`Thread`类来创建线程。创建一个线程的子类,你需要重写`run()`方法,这个方法包含了...

    第8章(多线程).ppt

    在Java中,创建线程主要有两种方式:继承Thread类或实现Runnable接口。这里讨论的是继承Thread类的方式: - 创建Thread的子类,并覆盖`run()`方法,其中包含线程要执行的代码。 - 实例化这个子类对象,并调用`start...

    JAVA面试题大全 经常考的

    通过实现Runnable接口或继承Thread类,然后创建线程对象并调用start()方法。 七、IO流 9. 什么是Java的IO流?分为哪几类? IO流用于读写数据,分为字节流和字符流两大类,每类又分为输入流和输出流,以及节点流和...

    详解Java实现多线程的三种方式

    本文将详细讲解Java实现多线程的三种方式:继承Thread类、实现Runnable接口以及实现Callable接口。 1. 继承Thread类 在Java中,我们可以通过继承Thread类来创建一个新的线程。在自定义的子类中,我们需要重写...

    最新java面试题及答案

    答案是,多线程的实现有多种方式,如继承Thread类、实现Runnable接口、使用ExecutorService、Future、Callable实现由返回值的线程。同步和并发可以通过同步方法、同步代码块、锁来解决。 11. 什么是守护线程,用...

    Java大数据面试常见问题.pdf

    多线程有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口。实现 Runnable 接口比较好,因为实现类可以实现多个接口,而只能继承一个类。 7. Java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以...

Global site tag (gtag.js) - Google Analytics