多线程编程:任务取消,中断

线程中断是一个协作机制,一个线程给另外一个线程发送信号(signal),通知它在方便和可能的情况下,停止正在做的事情,去做其他事情。


使用中断来处理取消之外的任何任务都是不可取的。


Thread 包含一个静态嵌套类,Thread.State


阻塞库函数:

监测线程何时被中断,并提前返回。

如果监测到中断,具体表现为: 

  • 清除中断状态,
  • 跑出InterruptedException
当线程不处于阻塞状态情况下,发生中断,会设置线程的中断状态,等待被取消的活动


如果任务代码响应中断,那么可以使用中断作为取消机制,并利用很多库类对中断的支持。中断通常是实现取消最明智的选择。


中断策略:

决定线程如何应对中断请求。

中断策略最有意义的是对线程级和服务级取消的规定。

区分任务和线程对中断的反应。


    • 任务不在自己拥有的线程中执行:

代码如果不是线程的所有者,就应该小心地保存中断状态,这样所有者的代码才能够最终对其起到作用。

线程应该只能够被线程所有者中断,所有者把线程的中断策略封装到一个合适的取消机制中,比如关闭方法。


每个线程都有自己的中断策略,所以不应该中断线程,除非你知道中断对线程意味着什么。


响应中断:

传递异常,使你的方法成为可中断的阻塞方法。

保存中断状态,使上层调用栈中的代码能够进行处理。


只有实现了线程中断策略的代码才可以响应中断其请求,通用目的的任务和库的代码决不应该接收中断请求。


处理不可中断阻塞:

使用与中断类似的手段,确保可以停止这些线程。需要清楚知道线程为什么会被阻塞。


你可能感兴趣的:(多线程编程:任务取消,中断)