如下图展示并发和并行CPU核心执行的方式

我们想让同一个CPU执行几个松耦合的任务,充分利用CUP核,避免因为等待,而阻塞线程执行,浪费宝贵的计算资源。CompletableFuture是处理这种情况的利器。

1 Future接口

1.1 Future UML

image.png

1.2 Future示例

用一个小案例来演示Future接口

  1. ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 2, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100));
  2. // 1 提交一个callable任务
  3. Future<Object> future = threadPoolExecutor.submit(() -> {
  4. doSomething();
  5. return true;
  6. });
  7. // 2 同步执行方法2
  8. doSomething2();
  9. // 3 同步获取异步方法1的结果
  10. Object o = future.get();
  11. System.out.println(o);

1 首先我们向线程池提交一个Callable的异步任务,Future对象封装任务的返回值。 2 示例中future对象是FutureTask类型对象,get()同步等待异步任务执行结束。get()也可设置超时时间。