11_03.【Java】线程的3种实现方式

本文详细介绍了Java中创建线程的三种方式:1) 继承Thread类并覆写run()方法,2) 实现Runnable接口,3) 使用Callable和Future接口。对比了三种方式的优缺点,推荐使用Runnable接口实现,以避免单继承的限制,并增强程序的可扩展性。同时,给出了多个实例来演示每种方式的用法。
摘要由CSDN通过智能技术生成

Java提供了三种实现多线程的方式,分别是继承java.lang.Thread类实现,通过java.lang.Runnable接口实现以及通过Callable和Future创建线程。

一、继承Thread类覆写run()方法实现多线程

1、继承Thread类覆写run()方法实现多线程的步骤

Thread类是java.lang包中的一个类,Thread类的对象用来代表线程,通过继承Thread类创建,启动并执行一个线程的步骤如下:

  • 创建一个继承Thread类的子类;

  • 覆写Thread类的run()方法;

  • 创建线程类的一个对象;

  • 通过线程类的对象调用start()方法启动线程(启动之后会自动调用覆写的run()方法执行线程)。下面详细介绍这四个步骤:

(1)创建一个继承Thread类的子类

Thread类的两个构造方法如下:

  • public Thread():创建一个新的线程。
  • public Thread(String threadName):创建一个名称为 threadName的线程对象

语法如下:

public class ThreadTest extends Thread{
   
  //code
  private int count = 10;
}

创建新线程之后,如果需要操纵创建好的新线程,那么需要使用 Thread类提供的方法,Thread类的常用方法如表:

修饰符/类型 方法 描述
void interrupt() 中断线程。
void join() 等待该线程终止。
void join(long millis) 等待该线程终止的时间最长为 millis 毫秒 。
void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
static void sleep(long millis) 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
static void sleep(long millis, int nanos) 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
void start() 使该线程开始执行;Java 虚拟机调用该线的 run 方法。
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。

更多Thread方法请查看多线程(Thread类和Runnable接口详述)中的Thread类部分内容。

(2)覆写Thread类的run()方法

当继承一个Thread类之后,就在线程类中重写run()方法,并将实现线程功能的代码写入run()方法中,然后调用Thread类的start()放方法启动线程,线程启动中以后就会自动调用覆写的run()方法执行线程。

Thread类对象需要一个任务来执行,任务是指线程在启动之后执行的工作,任务的代码写在run()中。run()方法必须使用如下语法格式进行覆写:

public void run(){
   
  //code
}

(3)创建线程类的一个对象

在main主方法中使用如下语法创建线程对象:

public static void main(String[] args){
   
  ThreadTest test = new ThreadTest();
}

(4)启动线程

Java虚拟机调用Java程序的main方法时,就启动了主线程。如果我们想要启动其他程序,那么需要通过线程类对象调用start()方法来实现:

public static void main(String[] args){
   
  ThreadTest test = new ThreadTest();    //创建线程对象
  test.start();                          //启动线程
}

⚠️注意:如果start()方法调用一个已经启动的线程,系统将抛出IllegalThreadException异常。

2、继承Thread类实现多线程的应用

实例1:继承Thread类,覆写run()方法创建并启动线程
public class ThreadTest extends Thread{
   
  private int count = 10;
  @Override
  public void run(){
   
  while(true){
                         //使count变量自减,当自减为0时,退出循环
    System.out.println(count+" ");
    if(--count == 0){
   
      break;
    }
  }
}
  public static void main(String[] args){
   
  ThreadTest test = new ThreadTest();
  test.start();
}
}
Console:
10 
9 
8 
7 
6 
5 
4 
3 
2 
1 
实例2:继承Thread类创建多线程并启动多线程

创建一个多线程,包括听音乐和吃饭,并编写主线程调用start()方法启动线程。

  • 线程1:听音乐
import java.util.Date;

class ListenThread extends Thread {
   
    @Override
    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值