package net.jcip.examples; import java.util.concurrent.*; import static net.jcip.examples.LaunderThrowable.launderThrowable; /** * TimedRun *
* Cancelling a task using Future * * @author Brian Goetz and Tim Peierls */ public class TimedRun { private static final ExecutorService taskExec = Executors.newCachedThreadPool(); public static void timedRun(Runnable r, long timeout, TimeUnit unit) throws InterruptedException { Future> task = taskExec.submit(r); try { task.get(timeout, unit); } catch (TimeoutException e) { // task will be cancelled below } catch (ExecutionException e) { // exception thrown in task; rethrow throw launderThrowable(e.getCause()); } finally { // Harmless if task already completed task.cancel(true); // interrupt if running } } }