`
隐形的翅膀
  • 浏览: 498248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载: Java Thread and Runable

阅读更多
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:
package org.thread.demo; 
class MyThread extends Thread{ 
    private String name; 
    public MyThread(String name) { 
        super(); 
        this.name = name; 
    } 
    public void run(){ 
        for(int i=0;i<10;i++){ 
           System.out.println("线程开始:"+this.name+",i="+i); 
        } 
    } 
}

package org.thread.demo; 
    public class ThreadDemo01 { 
       public static void main(String[] args) { 
            MyThread mt1=new MyThread("线程a"); 
           MyThread mt2=new MyThread("线程b"); 
            mt1.run(); 
            mt2.run(); 
    } 
} 

但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
start()方法启动线程:
package org.thread.demo;
public class ThreadDemo01 {
    public static void main(String[] args) {
        MyThread mt1=new MyThread("线程a");
        MyThread mt2=new MyThread("线程b");
        mt1.start();
        mt2.start();
    }
};

这样程序可以正常完成交互式运行。

Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
 
public interface Runnable{ 
    public void run(); 
} 

例子:
package org.runnable.demo; 
class MyThread implements Runnable{ 
    private String name; 
    public MyThread(String name) { 
        this.name = name; 
    } 
    public void run(){ 
        for(int i=0;i<100;i++){ 
            System.out.println("线程开始:"+this.name+",i="+i); 
        } 
    } 
}; 


但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有
此时观察Thread类,有一个构造方法:public Thread(Runnable targer) 此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):
package org.runnable.demo; 
import org.runnable.demo.MyThread; 
public class ThreadDemo01 { 
        public static void main(String[] args) { 
            MyThread mt1=new MyThread("线程a"); 
            MyThread mt2=new MyThread("线程b"); 
            new Thread(mt1).start(); 
            new Thread(mt2).start(); 
        } 
} 

两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享


以卖票程序为例,通过Thread类完成:
 
package org.demo.dff; 
class MyThread extends Thread{ 
    private int ticket=10; 
    public void run(){ 
        for(int i=0;i<20;i++){ 
            if(this.ticket>0){ 
                System.out.println("賣票:ticket"+this.ticket--); 
            } 
        } 
    } 
}; 
下面通过三个线程对象,同时卖票: 
package org.demo.dff; 
public class ThreadTicket { 
    public static void main(String[] args) { 
        MyThread mt1=new MyThread(); 
        MyThread mt2=new MyThread(); 
        MyThread mt3=new MyThread(); 
        mt1.start();//每个线程都各卖了10张,共卖了30张票 
        mt2.start();//但实际只有10张票,每个线程都卖自己的票 
        mt3.start();//没有达到资源共享 
    } 
} 


如果用Runnable就可以实现资源共享,下面看例子:
package org.demo.runnable; 
class MyThread implements Runnable{ 
    private int ticket=10; 
    public void run(){ 
        for(int i=0;i<20;i++){ 
            if(this.ticket>0){ 
                System.out.println("賣票:ticket"+this.ticket--); 
            } 
        } 
    } 
} 
package org.demo.runnable; 
public class RunnableTicket { 
    public static void main(String[] args) { 
        MyThread mt=new MyThread(); 
        new Thread(mt).start();//三个线程的参数为同一个mt,在实现Runable接口的类中不会有问题, 但在继承Thread的类中就不可以,如果用同一个实例化对象mt,就会出现异常
        new Thread(mt).start();
        new Thread(mt).start(); 
    } 
}; 

虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。

Runnable接口和Thread之间的联系:
public class Thread extends Object implements Runnable
发现Thread类也是Runnable接口的子类。
分享到:
评论

相关推荐

    java_Thread.rar_java thread runable_thread runable

    在Java中,有两种方式来创建和管理线程:通过继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当你需要一个具有自定义行为的线程时,可以创建一个新的类,该类继承自`Thread`。重写`Thread`类的`run()`...

    java-龟兔赛跑Runable

    在Java编程语言中,"java-龟兔赛跑Runable"是一个典型的多线程示例,它基于经典的寓言故事“龟兔赛跑”。在这个场景中,龟和兔被实现为两个独立的线程,分别代表`Runnable`接口的实例。下面我们将详细探讨这个主题,...

    Java多线程Runable售票系统实现过程解析

    Java多线程Runable售票系统实现过程解析 本文主要介绍了Java多线程Runable售票系统实现过程解析,通过示例代码进行了非常详细的介绍,对大家的学习或者工作具有一定的参考学习价值。 Java多线程 Java多线程是Java...

    Runable实现多线程并且用两个线程打印0-10

    实现Runable接口的方式: 1创建实现Runable接口的实现类:必须实现run 方法 2创建1中对应的Runable接口的实现对象 3创建Thread对象 利用Thread Runable target 4调用Thread类的start 方法启动线程

    认识Thread和Runnable

    Thread 和 Runnable 是实现 Java 多线程的两种方式,Runnable 是接口,Thread 是类,建议使用 Runnable 实现 Java 多线程,不管如何,最终都需要通过 thread.start() 来使线程处于可运行状态。 Thread 的 start 和 ...

    java基础11111111111111111111

    10. **多线程**: Java内置了对多线程的支持,可以使用`Thread`类或实现`Runnable`接口创建线程。`Thread.sleep()`用于暂停线程,`synchronized`关键字用于同步访问共享资源。 11. **网络编程**: Java的`java.net`包...

    Java课件基本语法

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在“Java课件基本语法”中,我们将会深入探讨Java的核心概念,包括类、接口、继承以及对象的使用。这些是理解Java编程的...

    Java与C++的比较

    Java的多线程是基于线程类的,通过Runable接口实现。Java虚拟机(JVM)负责线程的创建、调度和管理。C++则在语言层面提供了线程支持,并允许直接操作线程。 9. Windows编程: Java的Swing和AWT提供了跨平台的图形...

    浙大远程 高级程序设计&#40;JAVA&#41; 在线1作业.doc

    2. **多线程与 Runnable**:题目中给出的代码 `public class X extends Thread implements Runable{...}` 会因在第一行产生编译错误,因为类 X 已经继承了 Thread 类,不能同时实现 Runnable 接口,因为这会导致继承...

    2_java基础面试40问(附答案)7.pdf

    - **java.lang**:包含基础类,如Thread、Exception、System等。 - **java.awt**:提供GUI构建类和绘图类。 - **java.io**:包含输入/输出流类,如FileInputStream和FileOutputStream。 - **java.util**:提供实用类...

    Java高级程序设计期末复习题.pdf

    42. **Runable 实现**:在示例程序中,`X` 类同时继承了 `Thread` 并实现了 `Runnable`,这是合法的,但通常不需要同时继承和实现。 43. **接口定义**:使用 `interface` 关键字定义接口。 44. **类修饰符**:在...

    Java-Java面向对象多态性教程

    Java是一种广泛使用的面向对象编程语言,其面向对象的特性之一就是多态性。多态性是面向对象编程的重要概念,它允许我们使用一个接口来表示多种类型的数据,从而增加了代码的灵活性和可重用性。在Java中,多态性的...

    西安交大JAVA 基础讲义

    7.JAVA线程的概念,对Thread,Runable的实现原理做了丰富的图例 8.JAVA网络的概念,列举了丰富的Socket编程实例 9.使用JDBC,ODBC连接数据库,介绍了Connection,Statement ,ResultSet的使用方法和注意事项。

    Java高级程序设计期末复习题.docx

    42. **Runable 实现**:实现 `Runnable` 接口可以避免单一继承的问题,因为 Java 不支持多重继承。 43. **接口关键字**:`interface` 关键字用于定义接口。 44. **类修饰符**:在定义类头时,可以使用的修饰符有 `...

    java-concurrency

    - Thread vs Runable (new Thread &lt;-&gt; new Runnable) - Callable vs Runable (new Callable &lt;-&gt; new Runnable) - Futures - isDone false is if not ready - get - exception if get(time, unit) when ...

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

    在Java编程语言中,线程是程序执行的基本单元,它允许程序同时执行多个任务。本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解...

    LocationManager:简化获取用户位置的 Android

    位置管理器 要在 Android 设备上获取位置信息,您需要执行“一些”步骤! 那些是什么? 让我们来看看... 检查应用程序是否需要权限如果没有,请向用户询问运行时权限检查用户是否授予权限假设我们获得了许可,现在呢...

    thread 线程类 实现runnable接口

    Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的基类,它提供了 run() 方法,该方法是...

    java笔试题(二)

    3. Runnable接口:Runable接口中包含一个run()方法,用于实现线程的执行逻辑。所以答案是A。 4. 访问类成员:要在Example类的main方法中直接访问私有成员x,需将其声明为static,因为静态成员不受实例化影响,可以...

    详解多线程及Runable 和Thread的区别

    多线程及Runable 和Thread的区别 多线程是一种常用的编程技术,用于提高程序的执行效率和响应速度。在 Java 中,多线程可以通过继承 Thread 类或实现 Runnable 接口来实现。虽然这两种方法都可以实现多线程,但它们...

Global site tag (gtag.js) - Google Analytics