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 终止线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • springboot+swagger2.10.5+mybatis-plus 入门详解

    springboot+swagger2.10.5+mybatis-plus 入门详解

    这篇文章主要介绍了springboot+swagger2.10.5+mybatis-plus 入门,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring注解驱动之ApplicationListener用法解读

    Spring注解驱动之ApplicationListener用法解读

    这篇文章主要介绍了Spring注解驱动之ApplicationListener用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 简单谈谈Java类与类之间的关系

    简单谈谈Java类与类之间的关系

    类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就简单给大家介绍一下。
    2016-05-05
  • java使用POI批量导入excel数据的方法

    java使用POI批量导入excel数据的方法

    这篇文章主要为大家详细介绍了java使用POI批量导入excel数据的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • SpringMVC实现文件上传和下载的工具类

    SpringMVC实现文件上传和下载的工具类

    这篇文章主要为大家详细介绍了SpringMVC实现文件上传和下载的工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Java 实现字符串SHA1加密方法

    Java 实现字符串SHA1加密方法

    这篇文章主要介绍了Java 实现字符串SHA1加密方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中Mybatis,SpringMVC,Spring的介绍及联系

    Java中Mybatis,SpringMVC,Spring的介绍及联系

    这篇文章主要为大家详细介绍了Java中Mybatis,SpringMVC,Spring的介绍及联系,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • java开发flyway的方法

    java开发flyway的方法

    这篇文章主要介绍了java开发flyway的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • java教程之对象序列化使用基础示例详解

    java教程之对象序列化使用基础示例详解

    所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象,下面详细介绍一下java对象的序列化使用方法
    2014-01-01
  • java工具类SendEmailUtil实现发送邮件

    java工具类SendEmailUtil实现发送邮件

    这篇文章主要为大家详细介绍了java工具类SendEmailUtil实现发送邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论