package org.baliga.java.concurrency; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; public class CachedThreads { static public void main(String[] args) { ExecutorService cachePool = Executors.newCachedThreadPool(); Future<?> task = cachePool.submit( new Runnable() { public void run() { System.out.println( "Hello world from within the cached pool thread" ); }}); System.out.println( "Waiting for task completion" ); while ( !task.isDone() ) { } System.out.println( "Task is completed" ); cachePool.shutdown(); System.out.println( "Waiting for pool shutdown" ); while ( !cachePool.isTerminated() ) { } System.out.println( "Pool shutdown successful" ); } }