Thread类的interrupt(),interrupted(),isInterrupted()
1. sleep() & interrupt()
线程A正在使用sleep()暂停着: Thread.sleep(100000);
如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用
a.interrupt();
令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例
执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt().当sleep中的线程被调用interrupt()时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.
2. wait() & interrupt()
线程A调用了wait()进入了等待状态,也可以用interrupt()取消.
不过这时候要小心锁定的问题.线程在进入等待区,会把锁定解除,当对 等待中的线程调用interrupt()时(注意是等待的线程调用其自己的interrupt()), 会先重新获取锁定,再抛出异常.在获取锁定之前,是无法抛出异常的.
3. join() & interrupt()
当线程以join()等待其他线程结束时,一样可以使用interrupt()取消之.因为调用join()不需要获取锁定,故与sleep()时一样,会马上跳到catch块里. 注意是随调用interrupt()方法,一定是阻塞的线程来调用其自己的interrupt方法.如在线程a中调用来线程t.join().则a会等t执行完后在执行t.join后的代码,当在线程b中调用来a.interrupt()方法,则会抛出InterruptedException
4. interrupt()只是改变中断状态而已
interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。
更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。
如果线程没有被阻塞,这时调用interrupt()将不起作用;
如果线程没有被阻塞,这时调用interrupt()将不起作用;
线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这一个时候A会有InterruptedException异常抛出来.但这其实是在sleep,wait,join这些方法内部会不断检查中断状态的值,而自己抛出的InterruptedException。
如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态,所以线程A不会抛出InterruptedException,而会一直执行着自己的操作.当线程A终于执行到wait(),sleep(),join()时,才马上会抛出InterruptedException.
若没有调用sleep(),wait(),join()这些方法,或是没有在线程里自己检查中断状态自己抛出InterruptedException的话,那InterruptedException是不会被抛出来的.
public void interrupt()
-
中断线程。
如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的
checkAccess
方法就会被调用,这可能抛出SecurityException
。如果线程在调用
Object
类的wait()
、wait(long)
或wait(long, int)
方法,或者该类的join()
、join(long)
、join(long, int)
、sleep(long)
或sleep(long, int)
方法过程中受阻,则其中断状态将被清除,它还将收到一个InterruptedException
。
public boolean isInterrupted()
-
测试线程是否已经中断。 线程的中断状态 不受该方法的影响。
线程中断被忽略,因为在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。
-
- 返回:
-
如果该线程已经中断,则返回
true
;否则返回false
。
public static boolean interrupted()
-
测试当前线程是否已经中断。 线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。
线程中断被忽略,因为在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。
-
- 返回:
-
如果当前线程已经中断,则返回
true
;否则返回false
。
Thread类的interrupt(),interrupted(),isInterrupted()相关推荐
- 关于interrupt(),interrupted(),isInterrupted()用法分析
我想代码是非常容易解释这个问题的了.下文会给出总结. 总结点击这里或者往下阅读: 直接来一段小代码吧: public class Interrupt {public static void main( ...
- Thread类中interrupt()、interrupted()和isInterrupted()方法详解
首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行. i ...
- Thread中interrupt()interrupted()和isInterrupted()的区别
2019独角兽企业重金招聘Python工程师标准>>> 在java线程中,线程的状态分为6种.官方文档的解释是: /*** Thread state for a thread whi ...
- java中interrupt,interrupted和isInterrupted的区别
文章目录 isInterrupted interrupted interrupt java中interrupt,interrupted和isInterrupted的区别 前面的文章我们讲到了调用int ...
- isInterrupted() interrupt() interrupted() 方法的简单解释
isInterrupted() interrupt() interrupted() 方法的简单解释 1.isInterrupted() 和 interrupt() 是实例方法,必须要通过对象实例来调用 ...
- 线程中断机制 interrupt、isInterrupted、interrupted方法
①. 什么是中断 ①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop.Thread.suspend.Thread. resume都已经被废弃了 ② ...
- 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
来自:冰河技术 写在前面 新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识.我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只 ...
- Java Thread类的静态布尔型interrupted()方法(带示例)
线程类静态布尔型interrupted() (Thread Class static boolean interrupted()) This method is available in packag ...
- 据说有人面试栽在了Thread类的stop()方法和interrupt()方法上
摘要:今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别. 本文分享自华为云社区<[高并发]又一个朋友面试栽在了Thread类的stop()方法和inter ...
最新文章
- Autocomplete 自动补全(Webform实战篇)
- python列表解析式_Python基础入门-列表解析式
- +智能”时代,华为如何将AI赋能到各行各业?
- 【学习笔记】HTTP通讯基础
- jsp页面调用ajax,在jsp中使用jquery的ajax
- 文档智能理解:通用文档预训练模型与数据集
- 马斯克宣布退出OpenAI,全身心投入特斯拉与SpaceX
- 三包围结构的字是什么样的_清桦学书之结构篇——包围结构。
- tcpdump高级过滤
- xshell远程登录工具的星号密码查看方法
- MySQL数据库简介
- HObject,unsigned char的相互转换
- DSP/DMP/SSP/RTB概念解释
- window.print() 文字过多会打印不全_明天开始打印准考证,你需要注意这些!
- 读计算机专业买什么电脑比较好?
- FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'D:/tjn/tra
- 它号称 Python 中性能最高的异步 Web 框架:超详细 Sanic 入门指南!
- 信息孤岛问题有多难?教你一招,免费解决
- C4D模型工具—细分
- 剑网3 插件 取得服务器信息,剑网3服务器监控插件
热门文章
- python爬取CSDN论坛
- K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示
- 第2关:求解出n以内所有能被5整除的正整数的乘积-------C语言程序设计技术(循环结构程序设计1)
- R语言ggplot2包之坐标轴
- 【求助】求D3D8多次初始化的一个问题
- unity 鼠标放置 ui_ui层次结构以及不常见但至关重要的任务放置在哪里
- C+实现RSA加密解密
- Java 形参和实参
- 门禁系统服务器需要什么要求,完备的门禁系统应该具有这些功能
- 全球与中国住院EHR系统市场现状及未来发展趋势(2022)