有一些活动不支持取消,却仍可能调用可中断的阻塞方法,它们必须在循环中调用这些方法,当发现中断后重新尝试。
public TaskgetNextTask(BlockingQueue<Task>queue){
booleaninterrupted=false;
try{
while(true){
try{
return queue.take();
}
catch (InterruptedException e){
interrupted=true;
//失败并重试
}
}
}
finaly{
if (interrupted) Thread.currentThread().interrupt();
}
}