параллельный поток, не использующий пользовательский пул forkjoinpool

У меня есть параллельный поток, как это:

mylist.stream().parallel().map(transform::docPDFTypeToItem)
.map(fdUtil::createEdiLine).forEach(document::add)

это работает на моих двух процессорах

теперь я пытаюсь увеличить размер forkjoinpool, потому что у меня много операций ввода-вывода, как описано здесь:

new ForkJoinPool(20).submit(() -> 
    mylist.stream().parallel().map(transform::docPDFTypeToItem)
    .map(fdUtil::createEdiLine).parallel().forEach(document::add)).get())

но это не работает, так как я использую только 5 потоков:

08:54:48.423 [ForkJoinPool-1-worker-18] 
08:54:48.426 [ForkJoinPool-1-worker-25] 
08:54:48.427 [ForkJoinPool-1-worker-29] 
08:54:48.430 [ForkJoinPool-1-worker-15] 
08:54:48.431 [ForkJoinPool-1-worker-11] 
08:54:50.426 [ForkJoinPool-1-worker-25] 
08:54:50.427 [ForkJoinPool-1-worker-29]
08:54:48.423 [ForkJoinPool-1-worker-18] 
08:54:48.426 [ForkJoinPool-1-worker-25] 
08:54:48.427 [ForkJoinPool-1-worker-29] 
08:54:48.430 [ForkJoinPool-1-worker-15] 
08:54:48.431 [ForkJoinPool-1-worker-11] 
08:54:50.426 [ForkJoinPool-1-worker-25] 
08:54:50.427 [ForkJoinPool-1-worker-29]
...

Если я использую

 System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "20");

он работает как положено (повторно использовано 20 потоков).

Вы знаете, что случилось? Это .submit() похоже на взлом?

Я знаю, что мог бы использовать completableFuture, например здесь но я думаю, что это менее читабельно.


person bodtx    schedule 17.03.2017    source источник
comment
Поэтому кажется, что использовать forkJoinpool в качестве оболочки для этого не очень хорошая идея.   -  person bodtx    schedule 17.03.2017