Java标准库中Thread类的基本用法总结大全

 更新时间:2026年01月12日 09:25:16   作者:浪浪山小妖怪!  
Thread类是Java中用于表示线程的类,允许程序并发执行,线程是程序执行的最小单位,多个线程可以共享程序的资源,这篇文章主要介绍了Java标准库中Thread类基本用法的相关资料,需要的朋友可以参考下

前言

线程是操作系统中的概念,操作系统内核实现了线程这样的概念,并且对用户层提供了一些api,供用户使用。在Java标准库中,Thread
类可以视为是对操作系统提供的api进一步的抽象和封装。

Thread 类的基本用法有:

一、线程创建

想要实现多线程编程,第一步就是需要创建一个线程。在Java中创建线程的方式有多种方式,下面介绍五种常见的创建方式:

方式1:继承Thread类,重写run方法!

  • 创建一个继承Thread类的子类
  • 重写run()方法,编写线程执行的代码
  • 创建子类实例并调用start()方法启动线程

优点:编码简单

缺点:Java是单继承,继承Thread后无法继承其他类

class MyThread extends Thread{
    @Override
    public void run() {
        System.out.println("方式1:继承Thread类,重写run方法!");
    }
}

//创建对象,并调用start()方法启动线程
Thread t = new MyThread();
t.start();

方式2:实现 Runnable, 重写 run方法

  • 创建一个实现Runnable接口的类
  • 实现run()方法,编写线程执行的代码
  • 创建Thread实例,传入Runnable实现类对象

优点:可以继承其他类,实现多个接口,更灵活

class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("方式2:实现 Runnable, 重写 run");
    }
}

//创建对象,并调用start()方法启动线程
Thread t = new Thread(new MyRunnable());
t.start();

方式3: 继承Thread, 重写run, 使用匿名内部类

  • 直接创建Thread的匿名子类
  • 在匿名内部类中重写run()方法
  • 适用于简单、一次性使用的线程
Thread t = new Thread(){
	@Override
	public void run() {
		System.out.println("方式3:继承Thread, 重写run, 使用匿名内部类");
	}
};

方式4: 实现Runnable, 重写run, 使用匿名内部类

  • 创建Runnable接口的匿名实现类
  • 在匿名内部类中实现run()方法
  • 将匿名Runnable对象传递给Thread构造函数
  • 比继承Thread的匿名内部类更灵活
Thread t = new Thread(new Runnable() {
	@Override
	public void run() {
		System.out.println("方式4: 实现Runnable, 重写run, 使用匿名内部类");
	}
});

方式5: 使用lambda表达式

  • Runnable是函数式接口,可以使用lambda表达式
  • 语法简洁,适合简单的线程任务
  • 代码更简洁
Thread t = new Thread(()->{
	System.out.println("方式5: 使用lambda表达式");
});

二、线程中断 - interrupt()

线程一旦启动进入工作状态,它就会根据代码编写的步骤去执行,一直到完成为止才结束。但是有时需临时打断它的执行,Thread类中提供了interrupt方法去实现这一功能。

interrupt() 是 Thread类的一个实例方法,用于中断线程。它设置线程的中断状态标志,但不会强制停止线程的执行。线程自身需要检查中断状态并决定如何响应。

thread.interrupt(); // 设置线程的中断标志位为 true

Thread.interrupted(); // 检查当前线程是否被中断(会清除中断状态)

thread.isInterrupted(); // 检查对象关联的线程是否被中断(不会清除中断状态)

例如下面代码实现中断:

public class Demo3 {
    public static void main(String[] args) throws InterruptedException {
        Thread worker = new Thread(() -> {
           while(!Thread.interrupted()){
               System.out.println("工作中...");
           }
            System.out.println("线程正常结束");
        });

        worker.start();//启动线程
        Thread.sleep(3000);//让线程工作三秒
        worker.interrupt(); //中断线程
    }
}

结果:

我们让线程工作三秒钟,此时while循环每次循环开始前检查中断状态,当执行执行中断指令后,线程结束循环,但线程不会强制停止线程的执行,继续把线程正常结束语句继续打印完后再结束。

另外,如果线程因为调用wait/join/sleep等方法而阻塞挂起,则以InterruptionException异常的形式抛出,中断状态会被清除(变为 false),如果不重新设置中断状态,while 循环会继续执行!

所以要在catch后恢复中断状态,确保了中断信号不会丢失,从而让while 循环的条件检查能检测到中断,线程就能正常退出。

public class Demo3 {
    public static void main(String[] args) throws InterruptedException {
        Thread worker = new Thread(() -> {
           while(!Thread.currentThread().isInterrupted()){
               System.out.println("工作中...");
               try {
                   Thread.sleep(1000);//sleep() 被中断时:会抛出 InterruptedException 并清除中断状态(false)
               } catch (InterruptedException e) {
                   System.out.println("线程在sleep时被中断");
                   Thread.currentThread().interrupt(); //中断状态恢复为true
                                                        //确保了中断信号不会丢失,
                                                        //确保了while 循环的条件检查能检测到中断
                                                        //确保了线程能正常退出
               }
           }
            System.out.println("线程正常结束");
        });

        worker.start();//启动线程
        Thread.sleep(1000);//让线程工作三秒
        worker.interrupt(); //中断线程
    }
}

三、线程等待 - join()

有时候,当有多个线程并发工作时,可能需要某个线程先执行完任务后,后一个线程再根据前一个线程执行结束的结果去进行自己的下一步工作时,就需要有一个先后执行顺序,此时可以使用join方法去实现。
栗如:

public class Demo {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.print("1");
            }
        });
        t.start();
        t.join();
        System.out.print("2");
    }
}

当主线程创建一个新线程 t 后,我们调用start方法启动线程,再调用join方法让main主线程等待,等打印完 “1” 后,主线程再执行打印 “2” 操作,因此最终结果为 “12”。

如果不使用join方法,会出现两种结果,分别是“12” 或者是“21”。因此t线程和main线程是并发执行的,他们的执行顺序都是操作系统随机调度的,为了保证结果为 “12”,就得保证t线程优先执行,此时就可以调用join方法,使main线程等待。

四、线程休眠 - sleep()

调用sleep方法可以使线程暂时进入休眠状态,单位为毫秒,比如sleep(3000)就是休眠三秒钟。

五、获取线程实例 - currentThread()

返回当前线程对象的引用

例如:

小结

以上就是Java标准库中Thread类的一些基本用法,由于个人水平有限,如有不足之处,欢迎一起交流学习共同进步!

到此这篇关于Java标准库中Thread类的基本用法总结大全的文章就介绍到这了,更多相关Java标准库Thread类用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea环境下Maven无法正常下载pom中配置的包问题

    idea环境下Maven无法正常下载pom中配置的包问题

    这篇文章主要介绍了idea环境下Maven无法正常下载pom中配置的包的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • java基于RMI远程过程调用详解

    java基于RMI远程过程调用详解

    这篇文章主要为大家详细介绍了java基于RMI远程过程调用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 将Java程序的输出结果写到txt文件中的方法

    将Java程序的输出结果写到txt文件中的方法

    今天小编就为大家分享一篇将Java程序的输出结果写到txt文件中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 一篇文章带你初步认识Maven

    一篇文章带你初步认识Maven

    这篇文章主要为大家初步认识了Maven,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Java扩展库RxJava的基本结构与适用场景小结

    Java扩展库RxJava的基本结构与适用场景小结

    RxJava(GitHub: https://github.com/ReactiveX/RxJava)能够帮助Java进行异步与事务驱动的程序编写,这里我们来作一个Java扩展库RxJava的基本结构与适用场景小结,刚接触RxJava的同学不妨看一下^^
    2016-06-06
  • Java集合之Set接口及其实现类精解

    Java集合之Set接口及其实现类精解

    set接口是继承自Collection的子接口,特点是元素不重复,存储无序。在set接口的实现类中添加重复元素是不会成功的,判断两个元素是否重复根据元素类重写的
    2021-09-09
  • SpringBoot事件机制相关知识点汇总

    SpringBoot事件机制相关知识点汇总

    这篇文章主要介绍了SpringBoot事件机制相关知识点汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • netflix.discovery.shared.transport.TransportException:Cannot execute request on any known server

    netflix.discovery.shared.transport.TransportException:Cannot

    这篇文章主要介绍了netflix.discovery.shared.transport.TransportException:Cannot execute request on any known server报错问题及解决方法,感兴趣的朋友一起看看吧
    2023-09-09
  • SpringBoot项目部署到服务器上的方法(Jar包)

    SpringBoot项目部署到服务器上的方法(Jar包)

    这篇文章主要介绍了SpringBoot项目部署到服务器上的方法(Jar包),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • MyBatis插件实现SQL执行耗时监控

    MyBatis插件实现SQL执行耗时监控

    MyBatis插件(Plugin)是其框架扩展性的核心,本文深入剖析插件实现原理,手把手教你开发企业级SQL监控插件,有需要的小伙伴可以了解下
    2025-12-12

最新评论