Java并发编程实践笔记之—阻塞和中断方法(Blocking and Interruptible Methods)

线程阻塞
  • 线程阻塞或者暂停执行的原因
    1. 等待I/O操作结束
    2. 等待获得一个锁
    3. 等待从Thread.sleep中醒来
    4. 等待另一个线程的计算结果
  • 线程阻塞时的状态
    1. BLOCKED
    2. WAITING
    3. TIMED_WAITING
  • 阻塞操作和执行时间很长的普通操作差别在于:被阻塞的线程必须等待某个不受它控制的事件发生后才能继续执行,线程被置回RUNNALBE状态,并可以再次被调度执行
线程中断
  • 当某个方法抛出InterruptedException时,表示该方法是一个阻塞方法,如果这个方法被中断,那么它将努力提前结束阻塞状态
  • 中断是一种协作机制:线程A中断B时,A仅仅是要求B在执行到某个可以暂停的地方停止正在执行的操作——前提是如果线程B愿意停止下来
  • 如何处理调用代码抛出的InterruptedException
    1. 传递,最明智的策略
    2. 有时候无法抛出,比如代码是Runnable的一部分时,捕获InterruptedException并通过调用当前线程的interrupt方法恢复中断状态
    3. 不能做:捕获但不做任何响应
public class TaskRunnable implements Runnable {
    BlockingQueue<Task> queue;
    ...
    public void run() {
        try {
            processTask(queue.take());
        } catch (InterruptedException e) {
             <span class="docEmphasis">// restore interrupted status</span>
             <span class="docEmphStrong">Thread.currentThread().interrupt();</span>
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值