import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; public class ExecutorTest7_2 { public ExecutorTest7_2() { ExecutorService e = Executors.newCachedThreadPool(); System.out.println("Initial Thread Pool:"); ConcurrentUtils.listThread(); e.execute(new RunnableTask("Task0")); for (int i = 0; i <= 80; i+=20) { System.out.println("\n" + i + " seconds:"); ConcurrentUtils.listThread(); try { TimeUnit.SECONDS.sleep(20); } catch (InterruptedException ex) { ex.printStackTrace(); } } e.shutdown(); System.out.println("Terminating Threads:"); ConcurrentUtils.listThread(); } class RunnableTask implements Runnable { private String name; public RunnableTask(String name) { this.name = name; } public void run() { System.out.println(name + " Starts."); try { Thread.sleep(2000L); } catch (InterruptedException ex) { System.out.println(name + " is Canceled"); return; } System.out.println(name + " is Done."); } } public static void main(String[] args) { new ExecutorTest7_2(); } }