线程中止

简介: 线程中止

公众号merlinsea


线程的状态转换流程图:

640.jpg


线程中止需要注意的问题:当调用线程中止的方法时,如果线程后续还有代码没有执行完毕应该继续让线程执行,执行完整个run()方法体中的逻辑以后就停止运行线程。

调用线程的interrupt()改变线程的标记位来控制线程的中断

注意点:线程的执行逻辑应该先判断线程的中断标志位是否为false再执行业务逻辑代码


public class InterruptDemo implements  Runnable {
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            //进入方法体以后就一定会执行完整个方法体的逻辑,再去判断是否中断
            //业务逻辑放在while或者if的方法体中!!!
            System.out.println(Thread.currentThread().getName());
        }
    }
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new InterruptDemo());
        thread.start();
        Thread.sleep(1000L);
        //调用线程的interrupt()方法会将改变线程的标记位,用于标识线程是否中断
        thread.interrupt();
    }
}


在普通的线程中可以自己通过增加一个标记变量来实现类似interrupt的功能

核心:增加一个中断标记位,作为一个阀值控制业务逻辑是否要执行下一轮!!!


public class MyInterruptDemo implements Runnable {
    //中断标记位
    private static volatile  boolean ISINTRRUPT = false;
    @Override
    public void run() {
        while (!ISINTRRUPT) {
            //业务逻辑
            System.out.println(Thread.currentThread().getName());
        }
    }
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new MyInterruptDemo());
        thread.start();
        Thread.sleep(1000L);
        //修改中断标记位
        ISINTRRUPT = !ISINTRRUPT;
    }
}


vip算法班永久学习班: 800元/人

周一、周三、周五:8:30-9:30,周六、周日:10:30-11:30

报名方式:通过公众号导航栏的刷题群即可联系到我的微信号

vip永久班算法训练营

奔跑的小梁,公众号:梁霖编程工具库算法训练营快来参加吧~
相关文章
|
安全 Java
Java多线程-线程中止
不正确的线程中止-Stop Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。Destroy: JDK未实现该方法。 /** * @author simon */ public class StopThread extends Thread { pr...
2807 0
线程已被中止- “Thread was being aborted”
线程已被中止- “Thread was being aborted” 遇到过这个exception么? 这个exception是为什么而产生的呢? 下面的代码段来自MSDN, 很有说明性.   简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了.
|
Java API
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境中,线程抛出的异常是不能用try....catch捕获的,这样就有可能导致一些问题的出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。
1275 0
|
8天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
38 17
|
17天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
50 26
|
2月前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
2月前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
232 2