如何为CompletableFuture :: supplyAsync选择Executor

时间:2015-10-27 19:48:15

标签: java java-8 executorservice threadpoolexecutor completable-future

CompletableFuture::supplyAsync(() -> IO bound queries)

如何为CompletableFuture :: supplyAsync选择Executor以避免污染ForkJoinPool.commonPool()

Executors中有很多选项(newCachedThreadPoolnewWorkStealingPoolnewFixedThreadPool等)

我读到了新的ForkJoinPool here

如何为我的用例选择正确的?

2 个答案:

答案 0 :(得分:4)

您应该使用public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)方法。 作为执行者,您可以使用Executors.new中的任何一个.. - 这取决于您的需求。 最好使用newFixedThreadPool()而不是newCachedThreadPool(),因为newCachedThreadPool()可能导致创建到许多线程的性能问题,甚至抛出OutOfMemoryError。 这是一个非常好的article,有很好的例子。

答案 1 :(得分:0)

添加到Anton的答案中,使用newFixedThreadPool而不是newCachedThreadPool是明智的,除非您知道该操作不会导致OutOfMemoryError。由于您的请求是一个I / O进程,因此使用Async nio请求(如AsynchronousFileChannel或Async Rest Client等)可以极大地补充您的性能。