Как установить ForkJoinPool с требуемым количеством рабочих потоков в CompletableFuture.supplyAsync (поставщик поставщик) метод?

согласно Oracle,

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

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

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

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

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

1 ответов


ForkJoinPool осуществляет Executor.

поэтому вы можете написать свой код следующим образом:

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