CompletableFuture使用注意

  • CompletableFuture不带xxxAsync(xxx)的方法默认会在当前线程执行(当前线程指的是调用CompletableFuture.complete(xxx)或者CompletableFuture.completeExceptionally(xxx)的线程), 因此此种方式CompletableFuture的线程执行策略为尽量不切换线程(这里的尽量并不是完全一定, 因为如果当前future已经为完成的状态那么CompletableFuture会直接执行后续逻辑)
  • CompletableFuturexxxAsync(xxx)的方法要求传入一个Executor, 后续回掉逻辑将在这个Executor中执行。 默认不传的情况下会使用ForkJoinPool中的公共线程池。 因此应当对所有的xxxAsync(xxx)方法调用格外注意, 一旦使用了错误的线程池可能导致隔离性的缺失, 性能不符合预期等问题。