线程中止

简介: 线程中止

公众号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...
2848 0
|
Java API
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境中,线程抛出的异常是不能用try....catch捕获的,这样就有可能导致一些问题的出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。
1359 0
线程已被中止- “Thread was being aborted”
线程已被中止- “Thread was being aborted” 遇到过这个exception么? 这个exception是为什么而产生的呢? 下面的代码段来自MSDN, 很有说明性.   简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了.
|
1月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
140 6
|
4月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
301 83
|
1月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
214 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
217 16

热门文章

最新文章