java 终止线程的4种方式小结

 更新时间:2024年05月23日 11:51:16   作者:程序员易晶  
本文主要介绍了java终止线程的4种方式小结,包含布尔标志位,interrupt()方法,stop()方法和Thread.interrupt()方法,具有一定的参考价值,感兴趣的可以了解一下

终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法。即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行。比如设置一个标志来控制循环是否执行,通过这种方式让线程离开run()方法。

一、使用布尔标志位

在线程的执行代码中,使用一个布尔类型的标志位来标识线程是否需要终止。线程在执行过程中,不断地检查这个标志位,如果标志位为true,则主动退出线程执行的循环或方法,从而终止线程的执行。

public class MyThread implements Runnable {
    private volatile boolean flag = true;

    public void run() {
        while (flag) {
            // 执行线程任务
        }
    }

    public void stopThread() {
        flag = false;
    }
}

二、使用interrupt()方法

每个线程对象都有一个interrupt()方法。通过调用该方法,可以将线程的中断状态设置为"中断"。在线程的执行代码中,在适当的位置使用Thread.currentThread().isInterrupted()方法来检查线程的中断状态,并在必要时终止线程的执行

public class MyThread extends Thread {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            // 执行线程任务
        }
    }
    
    public void stopThread() {
        interrupt();
    }
}

三、使用stop()方法(已过时)

Thread类提供了stop()方法,可以立即终止线程的执行。但是该方法已过时,不推荐使用。因为stop()方法可能导致线程不会释放占用的锁资源,从而引发线程安全问题。

public class MyThread extends Thread {
    public void run() {
        while (true) {
            // 执行线程任务
        }
    }
    
    public void stopThread() {
        stop();
    }
}

四、使用Thread.interrupt()方法配合isInterrupted()方法

线程的interrupt()方法会将线程的中断状态设置为"中断"。在线程的执行代码中,可以使用Thread.currentThread().isInterrupted()方法检查线程的中断状态,并在必要时终止线程执行。与方式2相比,这种方式更加灵活,可以处理更复杂的线程终止逻辑。

public class MyThread extends Thread {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                // 执行线程任务
                // 可能会有一些阻塞操作,如Thread.sleep()等
            } catch (InterruptedException e) {
                // 捕获InterruptedException异常,清除中断状态
                Thread.currentThread().interrupt();
            }
        }
    }
    
    public void stopThread() {
        interrupt();
    }
}

到此这篇关于java 终止线程的4种方式小结的文章就介绍到这了,更多相关java 终止线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • spring 注解验证@NotNull等使用方法

    spring 注解验证@NotNull等使用方法

    这篇文章主要介绍了spring 注解验证@NotNull等使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • java编程的30个建议

    java编程的30个建议

    这篇文章主要介绍了java编程的30个建议,需要的朋友可以参考下
    2014-05-05
  • Java基础知识精通注释与数据类型及常量与变量

    Java基础知识精通注释与数据类型及常量与变量

    本文给大家介绍了Java的注释与数据类型和常量变量,这些都是最基础的知识,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • mybatis-plus自定义业务实现方式

    mybatis-plus自定义业务实现方式

    本文介绍了使用MyBatis-Plus(简称MP)进行数据库操作的实现步骤,包括创建实体类、Mapper接口和XML文件、Service接口和实现类,以及测试类,重点强调了业务层参数校验、事务管理以及复杂SQL的处理方式
    2026-03-03
  • 基于Java+Selenium实现保存网站登录数据的详细指南

    基于Java+Selenium实现保存网站登录数据的详细指南

    在使用 Selenium 进行自动化测试时,频繁地手动登录网站可能会非常耗时,为了提高效率,我们可以采取一些措施来保存网站的登录数据,本文将详细介绍两种常见的方法,需要的朋友可以参考下
    2025-08-08
  • Spring Boot中@Import三种使用方式实例详解

    Spring Boot中@Import三种使用方式实例详解

    这篇文章主要介绍了Spring Boot中@Import三种使用方式,主要有引入普通类,引入importSelector的实现类及引入importBeanDefinitionRegister的实现类,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-11-11
  • springboot项目中jackson-序列化-处理 NULL教程

    springboot项目中jackson-序列化-处理 NULL教程

    这篇文章主要介绍了springboot项目中jackson-序列化-处理 NULL教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 更改idea的JDK版本超简单便捷方法

    更改idea的JDK版本超简单便捷方法

    idea很多地方都设置了jdk版本,不同模块的jdk版本也可能不一样,下面这篇文章主要给大家介绍了关于更改idea的JDK版本的超简单便捷方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • SpringBoot+MinIO实现对象存储的示例详解

    SpringBoot+MinIO实现对象存储的示例详解

    MinIO 是一个基于Apache License v2.0开源协议的对象存储服务,它是一个非常轻量的服务,可以很简单的和其他应用的结合,所以下面我们就来看看SpringBoot如何整合MinIO实现对象存储吧
    2023-10-10
  • logback的isDebugEnabled日志配置级别源码解析

    logback的isDebugEnabled日志配置级别源码解析

    这篇文章主要为大家介绍了logback的isDebugEnabled日志配置级别源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论