import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorTest2_2 { public ExecutorTest2_2() { System.out.println("Initial Threads:"); ConcurrentUtils.listThread(); ExecutorService e = Executors.newSingleThreadExecutor(); e.execute(new RunnableTask()); try { Thread.sleep(1000L); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println("RuunableTask1 Threads;"); ConcurrentUtils.listThread(); e.execute(new RunnableTask()); try { Thread.sleep(1000L); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println("RuunableTask2 Threads;"); ConcurrentUtils.listThread(); try { Thread.sleep(4000L); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println("Processed Threads:"); ConcurrentUtils.listThread(); e.shutdown(); System.out.println("Final Threads:"); ConcurrentUtils.listThread(); } class RunnableTask implements Runnable { public void run() { System.out.println("RunnableTask starts."); try { Thread.sleep(2000L); } catch (InterruptedException ex) { System.out.println("RunnableTask is Canceled"); return; } System.out.println("RunnableTask is Done."); } } public static void main(String[] args) { new ExecutorTest2_2(); } }