博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:java线程中的interrupt,isInterrupt,interrupted方法
阅读量:6922 次
发布时间:2019-06-27

本文共 1315 字,大约阅读时间需要 4 分钟。

http://blog.csdn.net/gtuu0123/article/details/6040105

————————————————————————————————————————————————————————————————

在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下
(1)interrupt:置线程的中断状态
(2)isInterrupt:线程是否中断
(3)interrupted:返回线程的上次的中断状态,并清除中断状态
举个例子:
用法:
class MyThread 
extends Thread {
    ......
    ......
    
public 
void run() {
        
try {
            
while(!Thread.currentThread().isInterrupted()) {
                
//
当达到队列容量时,在这里会阻塞
                
//
put的内部会调用LockSupport.park()这个是用来阻塞线程的方法
                
//
当其他线程,调用此线程的interrupt()方法时,会设置一个中断标志
                
//
LockSupport.part()中检测到这个中断标志,会抛出InterruptedException,并清除线程的中断标志
                
//
因此在异常段调用Thread.currentThread().isInterrupted()返回为false
                ArrayBlockingQueue.put(somevalue); 
            }
        } 
catch (InterruptedException e) {
            
//
由于阻塞库函数,如:Object.wait,Thread.sleep除了抛出异常外,还会清除线程中断状态,因此可能在这里要保留线程的中断状态
            Thread.currentThread().interrupt();
        }
    }
    
public 
void cancel() {
        interrupt();
    }
}
外部调用
MyThread thread = 
new MyThread();
thread.start();
......
thread.cancel();
thread.isInterrupted();

 

一般来说,阻塞函数,如:Thread.sleep、Thread.join、Object.wait、LockSupport.park等在检查到线程的中断状态时,会抛出InterruptedException,同时会清除线程的中断状态
对于InterruptedException的处理,可以有两种情况:
(1)外层代码可以处理这个异常,直接抛出这个异常即可
(2)如果不能抛出这个异常,比如在run()方法内,因为在得到这个异常的同时,线程的中断状态已经被清除了,需要保留线程的中断状态,则需要调用Thread.currentThread().interrupt()
另外,Thread.interrupted()在jdk库的源代码中比较常用,因为它既可以得到上一次线程的中断标志值,又可以同时清除线程的中断标志,一举两得,但同时也有坏处,就是这个函数有清除中断状态的副作用,不容易理解
你可能感兴趣的文章
redis的数据持久化方案
查看>>
2015年度精品 最新力作32位和64位xp,win7,win8,win10系统下载(电脑城专用版)
查看>>
hdu Wooden Sticks
查看>>
图像分类学习笔记
查看>>
Python学习笔记(二)
查看>>
语音信号处理之(一)动态时间规整(DTW)
查看>>
Python3 operator模块关联代替Python2 cmp() 函数
查看>>
温故知新系列(一)冒泡排序
查看>>
Web服务之LNMMP架构及动静分离实现
查看>>
java作业6
查看>>
从基础到分析,聊一聊企业报表平台的建设规划!
查看>>
java中的AIO
查看>>
混合云已到来,企业用户们你们准备好了吗?
查看>>
【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结...
查看>>
HomeAccess Ha910设置自动拨号
查看>>
备忘录方法与动态规划比较
查看>>
BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版
查看>>
KNN分类算法补充
查看>>
1、单例模式(饿汉/懒汉)
查看>>
poj 3273 Monthly Expense(二分穷举)
查看>>