线程中断

本文详细介绍了线程中断机制的工作原理及其在Java中的实现方式。包括如何使用interrupt方法请求线程中断、线程如何通过检查中断状态来响应中断请求、以及在阻塞操作中如何处理InterruptedException。

run方法返回或者出现了方法中没有捕获的异常,线程将终止。

Interrupt方法可以用来请求终止线程。当对一个方法使用interrupt方法时,线程的中断状态被重置。中断状态是每一个线程的boolean标志,每个线程应该不时的检查这个标志。要弄清中断状态,可以调用静态方法Thread.currentThread获取当前线程,然后调用isInterrupted方法:

      While!Thread.currentThread().isInterruted(){

…....

}

然而,当线程被阻塞(调用sleepwait),就无法检测中断状态,从而产生Interrupted Exception

一般情况下,线程简单地将中断作为一个终止请求。这种现成的run方法如下:

public void run(){
    try{
       while(!Thread.currentThread().isInterruted()&&more worl to do){
        … …
        }
    }catch(InterruptedException e){
        //Thread was interrupted during sleep or wait
    }finally{
        ……
    }
} 

  

如果每次工作完之后就调用sleep,则isInterruted方法就没有必要也没有用,它会清除中断状态并且抛出异常。这时捕获Interrupted Exception采用如下方法:

public void run(){
    try{
       while(more work to do){
          … …
         Thread.sleep(delay);
      }
   }catch(InterruptedException e){
        //Thread was interrupted during sleep
   }finally{
        ……
   }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值