Java线程中断

首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。

Thread.interrupt 的作用其实也不是中断线程,而是 通知线程应该中断了

具体到底中断还是继续运行,应该由被通知的线程自己处理。具体来说,当对一个线程,调用 interrupt() 时: ① 如果线程处于被阻塞状态(例如处于sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。仅此而已。 ② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。

interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。也就是说,一个线程如果有被中断的需求,那么就可以这样做: ① 在正常运行任务时,经常检查本线程的中断标志位,如果被设置了中断标志就自行停止线程。 ② 在调用阻塞方法时正确处理InterruptedException异常。(例如,catch异常后就结束线程。)

Thread thread = new Thread(() -> {
 while (!Thread.interrupted()) {
 // do more work.
 }
 });
 thread.start();
// 一段时间以后
 thread.interrupt();

Thread.interrupted():返回当前线程中断状态,并清除标志位是为了下次继续检测标志位。如果一个线程被设置中断标志后,选择结束线程那么自然不存在下次的问题,而如果一个线程被设置中断标识后,进行了一些处理后选择继续进行任务,而且这个任务也是需要被中断的,那么当然需要清除标志位了。

参考资料: https://www.zhihu.com/question/41048032

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一文搞懂 Java 线程中断

    在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们...

    Java技术栈
  • 一文搞懂 Java 线程中断

    下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。

    Java_老男孩
  • 深入分析Java线程中断机制

    在平时的开发过程中,相信都会使用到多线程,在使用多线程时,大家也会遇到各种各样的问题,今天我们就来说说一个多线程的问题——线程中断。在java中启动线程非常容易...

    哲洛不闹
  • Java NIO线程的中断机制

    Java NIO中InterruptibleChannel接口表示通道IO阻塞时可被异步的关闭和中断。

    Monica2333
  • Java多线程的中断机制

    这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理。感觉对InterruptedExcept...

    Vincent-yuan
  • Java并发之线程中断

         前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制。本篇主要来学习下Java中对线程中断机制的实现。...

    Single
  • Java多线程中断机制三种方法源码分析

    interrupt()、interrupted()、isInterrupted()

    Vincent-yuan
  • Java线程(四):线程中断、线程让步、线程睡眠、线程合并

    最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在...

    高爽
  • java中线程池的生命周期与线程中断

    如果代码能够在某个操作正常完全之前置入“完成”状态,那么这个操作就称为可取消的。java中提供了协作式机制,使请求取消的任务和代码遵循一种协商好的协议。

    爬蜥
  • 线程的中断

    『中断技术』其实是计算机系统中很重要的一个概念,甚至有人说,我们的操作系统就是「中断驱动的」。

    Single
  • jdk1.8之线程中断

    在Core Java中有这样一句话:"没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 ...

    intsmaze-刘洋
  • 浅聊线程中断

    “ 在前面分析Condition的时候,被阻塞的线程在我关闭应用的时候,会抛出异常,这是因为阻塞的线程被其他线程中断了。其实在学习AQS的时候我们也说过线程中断...

    每天学Java
  • 012.多线程-interrupt线程的中断

    interrupted 测试的时当前线程; isInterrupted 测试的时被调用的线程。

    qubianzhong
  • Java---多线程断点下载

    http://blog.csdn.net/jwzhangjie/article/details/9772247

    bear_fish
  • 探索JAVA并发 - 如何处理线程中断

    在上一篇如何优雅地取消线程任务中提到了通过中断可以取消线程正在进行的任务,现在针对中断这件事情再来简单聊聊。

    acupt
  • java多线程-概念&创建启动&中断&守护线程&优先级&线程状态

    在现代操作在运行一个程序时,会为其创建一个进程。例如启动一个QQ程序,操作系统就会为其创建一个进程。而操作系统中调度的最小单位元是线程,也叫轻量级进程,在一个进...

    互扯程序
  • Java并发-8.线程的构造启动,中断,完成

    运行线程前需要构造线程对象,这一步在Thread类的初始化部分(以下为init方法的源码):

    悠扬前奏
  • 并发编程之线程中断interrupt

    线程中断可能在平时的开发中我们用的不多,但是我相信大部分都见过InterruptedException,因为不管我们在调用object.wait()还是Thre...

    全栈程序员站长
  • 线程中断以及线程中断引发的那些问题,你值得了解

    上周写了一篇多线程的文章,其实更多方面是偏基础一点的文章,而且也比较大白话,争取人人都能看的明白,再举一些常见的例子,能很好的帮助大家理解多线程,文章发表之后我...

    一个程序员的成长

扫码关注云+社区

领取腾讯云代金券