线程的阻塞和中断

当某方法抛出InterruptedException时,表示该方法是一个阻塞方法,如果这个方法被中断,那么它将努力提前结束阻塞状态

Thread提供了interrupt方法,用于中断线程或者查询线程是否已经中断,每个线程都有一个布尔类型的属性,表示线程的中断状态,当中断线程时将设置这个状态

中断是一种协作机制,一个线程不能强制其他线程停止正在执行的操作而去执行其他的操作,当线程a中断b时,a仅仅是要求b在执行到某个可以暂停的地方停止正在执行的操作,前提是b愿意停止下来。

当在代码中调用了一个将抛出InterruptedException异常的方法时,你自己的方法也就变成了一个阻塞方法,并且必须要处理对中断的响应,两种处理方式

1.传递InterruptedException,
避开这个异常通常是,把异常传递给调用者,接受者选择直接上抛,或者做处理然后上抛

2.恢复中断
有时候不能抛出异常,比如代码是Runnable的一部分,在这些情况下,必须捕获InterruptedException,并通过调用当前线程上的interrupt方法恢复中断状体,在调用栈中更高层的代码引发一个中断

public class TaskRunnable implements Runnable{
  BlockingQueue<Task> queue;
  ...
  public void run(){
    try{
      processTask(queue.take());
    }catch(InterruptedException e){
      //恢复被中断的状态
      Thread.currentThread().interrupt();
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值