线程中止

简介: 线程中止

公众号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...
2770 0
|
Java API
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境中,线程抛出的异常是不能用try....catch捕获的,这样就有可能导致一些问题的出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。
1198 0
线程已被中止- “Thread was being aborted”
线程已被中止- “Thread was being aborted” 遇到过这个exception么? 这个exception是为什么而产生的呢? 下面的代码段来自MSDN, 很有说明性.   简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了.
|
19小时前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
19小时前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
14 1
|
19小时前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
11 0
|
19小时前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
19 1