`
weinan
  • 浏览: 39655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java多线程系列--Thread和Runnable

阅读更多
概要

本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable。
之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。关于线程池的内容,我们以后会详细介绍;现在,先对的Thread和Runnable进行了解。本章内容包括:
Thread和Runnable的简介
Thread和Runnable的异同点
Thread和Runnable的多线程的示例

 
Thread和Runnable简介

Runnable 是一个接口,该接口中只包含了一个run()方法。它的定义如下:

public interface Runnable {
    public abstract void run();
}

Runnable的作用,实现多线程。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程。

 

Thread 是一个类。Thread本身就实现了Runnable接口。它的声明如下:

public class Thread implements Runnable {}

Thread的作用,实现多线程。

 
Thread和Runnable的异同点

Thread 和 Runnable 的相同点:都是“多线程的实现方式”。
Thread 和 Runnable 的不同点:
Thread 是类,而Runnable是接口;Thread本身是实现了Runnable接口的类。我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。
此外,Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。
通常,建议通过“Runnable”实现多线程!

 
Thread和Runnable的多线程示例
1. Thread的多线程示例

下面通过示例更好的理解Thread和Runnable,借鉴网上一个例子比较具有说服性的例子。

 1 // ThreadTest.java 源码
 2 class MyThread extends Thread{  
 3     private int ticket=10;  
 4     public void run(){
 5         for(int i=0;i<20;i++){ 
 6             if(this.ticket>0){
 7                 System.out.println(this.getName()+" 卖票:ticket"+this.ticket--);
 8             }
 9         }
10     } 
11 };
12 
13 public class ThreadTest {  
14     public static void main(String[] args) {  
15         // 启动3个线程t1,t2,t3;每个线程各卖10张票!
16         MyThread t1=new MyThread();
17         MyThread t2=new MyThread();
18         MyThread t3=new MyThread();
19         t1.start();
20         t2.start();
21         t3.start();
22     }  
23 } 

运行结果:


Thread-0 卖票:ticket10
Thread-1 卖票:ticket10
Thread-2 卖票:ticket10
Thread-1 卖票:ticket9
Thread-0 卖票:ticket9
Thread-1 卖票:ticket8
Thread-2 卖票:ticket9
Thread-1 卖票:ticket7
Thread-0 卖票:ticket8
Thread-1 卖票:ticket6
Thread-2 卖票:ticket8
Thread-1 卖票:ticket5
Thread-0 卖票:ticket7
Thread-1 卖票:ticket4
Thread-2 卖票:ticket7
Thread-1 卖票:ticket3
Thread-0 卖票:ticket6
Thread-1 卖票:ticket2
Thread-2 卖票:ticket6
Thread-2 卖票:ticket5
Thread-2 卖票:ticket4
Thread-1 卖票:ticket1
Thread-0 卖票:ticket5
Thread-2 卖票:ticket3
Thread-0 卖票:ticket4
Thread-2 卖票:ticket2
Thread-0 卖票:ticket3
Thread-2 卖票:ticket1
Thread-0 卖票:ticket2
Thread-0 卖票:ticket1


结果说明:
(01) MyThread继承于Thread,它是自定义个线程。每个MyThread都会卖出10张票。
(02) 主线程main创建并启动3个MyThread子线程。每个子线程都各自卖出了10张票。

 
2. Runnable的多线程示例

下面,我们对上面的程序进行修改。通过Runnable实现一个接口,从而实现多线程。

 1 // RunnableTest.java 源码
 2 class MyThread implements Runnable{  
 3     private int ticket=10;  
 4     public void run(){
 5         for(int i=0;i<20;i++){ 
 6             if(this.ticket>0){
 7                 System.out.println(Thread.currentThread().getName()+" 卖票:ticket"+this.ticket--);
 8             }
 9         }
10     } 
11 }; 
12 
13 public class RunnableTest {  
14     public static void main(String[] args) {  
15         MyThread mt=new MyThread();
16 
17         // 启动3个线程t1,t2,t3(它们共用一个Runnable对象),这3个线程一共卖10张票!
18         Thread t1=new Thread(mt);
19         Thread t2=new Thread(mt);
20         Thread t3=new Thread(mt);
21         t1.start();
22         t2.start();
23         t3.start();
24     }  
25 }


运行结果:

Thread-0 卖票:ticket10
Thread-2 卖票:ticket8
Thread-1 卖票:ticket9
Thread-2 卖票:ticket6
Thread-0 卖票:ticket7
Thread-2 卖票:ticket4
Thread-1 卖票:ticket5
Thread-2 卖票:ticket2
Thread-0 卖票:ticket3
Thread-1 卖票:ticket1


结果说明:
(01) 和上面“MyThread继承于Thread”不同;这里的MyThread实现了Thread接口。
(02) 主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了10张票。这说明它们是共享了MyThread接口的。
分享到:
评论

相关推荐

    WHUT-java多线程实验-第三周-文件上传和下载.zip

    在“WHUT-java多线程实验-第三周-文件上传和下载.zip”这个实验中,我们将重点探讨如何在多线程环境中实现文件的上传和下载功能。这个实验基于IntelliJ IDEA开发环境,它是一个流行的Java集成开发环境,提供了丰富的...

    java多线程源码-source

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...

    java多线程编程-详细炒作例子

    Java多线程编程是复杂且强大的功能,它能够显著提升程序的性能和响应能力,尤其是在处理I/O密集型任务和需要并行计算的场景下。然而,线程的管理和调度也带来了同步、死锁等挑战,因此在享受多线程带来的好处的同时...

    java多线程实现-tcp端口扫描

    在本项目"java多线程实现-tcp端口扫描"中,我们利用多线程技术来加速TCP端口扫描的过程。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,广泛应用于网络通信中。端口扫描是网络安全检测和...

    Java多线程基础-01、数组概述.rar

    总的来说,"Java多线程基础-01、数组概述"的学习将帮助你理解如何在Java中创建和管理线程,以及如何在多线程环境下安全地使用数组。通过深入学习这部分内容,你将具备编写高效并发程序的基础,为后续的多线程编程...

    Java多线程--等待所有子线程执行完的五种方法.docx

    在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...

    Java多线程-Socket编程

    在 Java 中,多线程可以使用 Thread 类和 Runnable 接口来实现,而 Socket 编程则需要使用 java.net 包中的相关类来实现。 在 Java 多线程-Socket 编程中,客户端和服务器端都需要使用 Socket 来进行通信。客户端...

    头歌java多线程基础-Java多线程基础详解与实战指南

    内容概要:本文详细介绍了Java多线程的基础概念和关键技术点。首先解释了线程的基本概念、线程与进程的区别及其不同状态。接着,通过三种方式创建线程(继承Thread类、实现Runnable接口、使用Callable和Future接口)...

    java多线程机制 -- 源码详解

    Java 多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,模拟现实生活中的并发行为。在Java中,创建线程有两种主要方式:继承Thread类和实现Runnable接口。 在例子1中,我们看到一个简单的多线程示例。...

    java多线程案例-龟兔赛跑

    在Java多线程环境下,我们可以创建两个线程分别代表乌龟和兔子,它们并行运行,通过同步机制来模拟比赛过程。 首先,我们需要创建两个类,一个表示乌龟,另一个表示兔子。每个类都会实现`Runnable`接口,然后重写`...

    WHUT-java多线程实验-第二周-异常处理.zip

    本实验主要关注的是Java多线程中的异常处理,这在保证程序稳定性和可靠性方面至关重要。 异常处理是Java编程中不可或缺的一部分,它允许程序员优雅地处理程序运行时可能出现的问题,而不是让程序突然崩溃。Java通过...

    WHUT-java多线程实验-第一周-继承、多态.zip

    4. Java多线程:Java提供了丰富的API来支持多线程编程,包括Thread类和Runnable接口。学生可能需要创建并启动多个线程,实现并发执行。同时,理解线程同步的概念也非常重要,例如synchronized关键字、wait/notify...

    WHUT-java多线程实验-第四周-GUI.zip

    1. **Java多线程**:Java通过`Thread`类和`Runnable`接口支持多线程编程。创建新线程有两种主要方式:继承`Thread`类或实现`Runnable`接口。在Java中,主线程负责执行程序的主要逻辑,而其他线程可以并行执行特定...

    Java多线程学习-动力节点共22页.pdf.zip

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多核处理器的普及使得多线程技术变得尤为重要,因为它能够充分利用硬件资源,提高系统的...

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

    总结,实现`Runnable`接口是创建Java多线程的一种常见方式,它提供了更大的灵活性,尤其是在需要多继承或者线程之间需要共享数据的情况下。掌握这两种创建线程的方法,并了解其适用场景,对于编写高效的并发程序至关...

    java多线程Runnable实例

    `Runnable`接口是Java实现多线程的一种方式,通过实现`Runnable`接口并创建`Thread`对象,可以轻松地创建并运行多线程。`TestRunnable.java`文件展示了这一过程,同时也提醒我们在实际开发中要注意线程同步和通信,...

    java多线程例子-生产者消费者

    在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程编程实战指南-核心篇

    《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...

    Java多线程文章系列.pdf

    ### Java多线程文章系列知识点概述 #### 一、Java多线程编程...以上是《Java多线程文章系列》的主要知识点概述,涵盖了从多线程的基础概念到高级应用,希望能帮助读者深入理解Java多线程编程的核心技术和实践技巧。

Global site tag (gtag.js) - Google Analytics