package ch21concurrent.examples; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; /** * CheckForMail * <p/> * Using a private \Executor whose lifetime is bounded by a method call * * @author Brian Goetz and Tim Peierls */ public class CheckForMail { public boolean checkMail(Set<String> hosts, long timeout, TimeUnit unit) throws InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); final AtomicBoolean hasNewMail = new AtomicBoolean(false); try { for (final String host : hosts) exec.execute(new Runnable() { public void run() { if (checkMail(host)) hasNewMail.set(true); } }); } finally { exec.shutdown(); exec.awaitTermination(timeout, unit); } return hasNewMail.get(); } private boolean checkMail(String host) { // Check for mail return false; } }