概念不多说,网上随便百度下就可以找到一堆。直接看代码,注意关注下运行结果中日志记录的时间。
一,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()); } }
运行结果: