线程中止

简介: 线程中止

公众号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...
2804 0
|
Java API
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境中,线程抛出的异常是不能用try....catch捕获的,这样就有可能导致一些问题的出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。
1267 0
线程已被中止- “Thread was being aborted”
线程已被中止- “Thread was being aborted” 遇到过这个exception么? 这个exception是为什么而产生的呢? 下面的代码段来自MSDN, 很有说明性.   简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了.
|
28天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
62 1
|
3月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
72 1
|
3月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
52 3
|
3月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
34 2

相关实验场景

更多