概念不多說,網上隨便百度下就可以找到一堆。直接看代碼,注意關注下運行結果中日志記錄的時間。
一,Future:
@Slf4j public class MyFutureDemo { @SuppressWarnings("all") public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newCachedThreadPool(); Future<String> future = pool.submit(new Callable<String>() { @Override public String call() throws Exception { log.info("callable execute ..."); Thread.sleep(5000); return "done"; } }); log.info("execute something in main ..."); Thread.sleep(1000); log.info("future is done ? {}", future.isDone()); log.info("result: {}", future.get()); log.info("future is done ? {}", future.isDone()); } }
運行結果:
二,FutureTask
@Slf4j public class MyFutureTaskDemo { @SuppressWarnings("all") public static void main(String[] args) throws Exception { ExecutorService threadPool = Executors.newCachedThreadPool(); FutureTask<String> futureTask = new FutureTask<String>(new Callable() { @Override public Object call() throws Exception { log.info("callable execute ..."); Thread.sleep(5000); return "done"; } }); threadPool.submit(futureTask); log.info("execute something in main ..."); Thread.sleep(1000); log.info("future is done ? {}", futureTask.isDone()); log.info("result: {}", futureTask.get()); log.info("future is done ? {}", futureTask.isDone()); } }
運行結果: