2016-04-12 5 views
6

Согласно Oracle,Как установить ForkJoinPool с нужным количеством рабочих потоков в CompletableFuture.supplyAsync (поставщик <U> поставщика) метод?

статический CompletableFuture supplyAsync (поставщик поставщик) Возвращает новый CompletableFuture, который асинхронно завершено к задачи, работающей в ForkJoinPool.commonPool() со значением, полученным по вызывая данный Поставщик.

статического CompletableFuture supplyAsync (поставщик поставщик, исполнитель исполнителя) Возвращает новый CompletableFuture, который асинхронно завершается задачами, работающих в данный исполнителе со значением , полученного путем вызова данного поставщика.

Если я использую "статический CompletableFuture supplyAsync (поставщик поставщик)" метод, по умолчанию используют ForkJoinPool.commonPool(). Это возвращает ForkJoinPool, который имеет число рабочих потоков, равное количеству доступных ядер в запущенной машине.

Но, я хочу использовать ForkJoinPool с моим пользовательским количеством рабочих потоков. Использование ForkJoinPool.commonPool() Я не могу этого сделать.

Так как я могу использовать CompletableFuture.supplyAsync метод с моим объявленным ForkJoinPool с использованием числа рабочих потоков, которые я хочу?

+2

Еще одна альтернатива: CompletableFuture.supplyAsync (yourSupplier, Executors.newWorkStealingPool (Your_thread_Acount)); –

ответ

7

ForkJoinPool инвентарь Executor.

Таким образом, вы можете написать код так:

int threadCount = 3; 
ForkJoinPool myPool = new ForkJoinPool(threadCount); 
CompletableFuture cf = CompletableFuture.supplyAsync(mySup, myPool);