package ch21concurrent.examples; import java.util.concurrent.*; /** * NoncancelableTask * <p/> * Noncancelable task that restores interruption before exit * * @author Brian Goetz and Tim Peierls */ public class NoncancelableTask { public Task getNextTask(BlockingQueue<Task> queue) { boolean interrupted = false; try { while (true) { try { return queue.take(); } catch (InterruptedException e) { interrupted = true; // fall through and retry } } } finally { if (interrupted) Thread.currentThread().interrupt(); } } interface Task { } }