import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class ExecutorTest7_1 { public ExecutorTest7_1() { ExecutorService e = Executors.newCachedThreadPool(); System.out.println("Initial Thread Pool:"); ConcurrentUtils.listThread(); for (int i = 0; i < 5; i++) { e.execute(new RunnableTask("Task" + i)); try { Thread.sleep(1500L); } catch (InterruptedException ex) { ex.printStackTrace(); } } try { Thread.sleep(2000L); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println("Processed Threads:"); ConcurrentUtils.listThread(); 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_1(); } }