import java.util.Date; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; public class ExecutorTest4 { public ExecutorTest4() { ExecutorService e = Executors.newSingleThreadExecutor(); Future future = e.submit(new CallableTask()); System.out.println("CallableTask is Called"); System.out.println("Future#isDone(): " + future.isDone()); try { System.out.println("Future#get(): " + future.get()); System.out.println("Future#isDone(): " + future.isDone()); } catch (ExecutionException ex) { ex.printStackTrace(); } catch (InterruptedException ex) { ex.printStackTrace(); } e.shutdown(); } class CallableTask implements Callable { public Date call() { try { Thread.sleep(1000L); } catch (InterruptedException ex) { System.out.println("CallableTask is Canceled"); return null; } System.out.println("CallableTask is Done."); return new Date(); } } public static void main(String[] args) { new ExecutorTest4(); } }