中断线程

本文详细介绍了Java中线程中断的实现机制,包括如何通过调用interrupt方法来请求中断线程,以及如何使用isInterrupted和interrupted方法来检查线程的中断状态。此外还讨论了如何处理InterruptedException。

检查线程中断状态

每一个线程都有一个记录该线程中断状态的标记位,这是一个 boolean 标记。每个线程都应该不时地检查这个标记位以确定线程是否已经被中断。

调用 interrupt 方法可以请求终止线程,也就是将成功调用 interrupt 方法的线程的中断标记位置为 true。

如果我们想知道线程是否被置位,应该操作:

① 调用静态的 Thread.currentThread 方法获得当前线程

② 调用 isInterrupt 方法检查标记位

while(!Thread.currentThread().isInterrupt()){}

处于阻塞状态的线程,无法检查它的中断状态。如果试图检查阻塞线程的中断状态就会产生 InterruptedException 异常


interrupted 和 isInterrupted

有两个非常类似的方法 interruptedisInterrupted, (interrupted 区别于interrupt方法,interrupt方法用来请求中断)

interrupted 方法是一个静态方法,它检测当前的线程是否被中断,而且调用 interrupted 方法后会清除该线程的中断状态,将当前线程中断状态位置为 false

isInterrupted 方法是一个实例方法,可以用来检测是否有线程被中断,调用这个方法不会改变线程的中断状态


不要忽略 InterruptedException

有两种方法处理 InterruptedException

1. 在 catch 子句中调用 Thread.currentThread().interrupt() 来设置中断状态

void Test(){
    ...
    try { sleep(delay); }
    catch (InterruptedException e) { Thread.currentThread().interrupt(); } 
}

2. 用 throws InterruptedException 标记方法

void Test() throws InterruptedException{
    ...
    sleep(delay);
    ...
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值