Простой вызов параллелизма запускает задачи параллельно? - PullRequest
0 голосов
/ 31 августа 2018

В интернете я видел множество примеров того, что для того, чтобы использовать API потоков для параллельной работы, просто вызовите метод .parallelStream(), например:

mySet
    .parallelStream()
    ... // do my fancy stuff and collect

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

ForkJoinPool.commonPool().submit(() -> {
    mySet
        .parallelStream()
        ... // do my fancy stuff and collect
})

Выполняет ли простой вызов parallelStream() все, что будет дальше, в нескольких параллельных потоках? Как в каком-то предварительно настроенном пуле потоков или что-то в этом роде. Или я должен создать свои потоки и затем использовать параллельный поток?

1 Ответ

0 голосов
/ 31 августа 2018

Да parallelStream работает параллельно.

Обычно при параллельном длинном потоке вы не хотите запускать его на commonPool, потому что все другие параллельные потоки тоже используют это.

Это, кстати, подробности реализации, так как поток не указывает, какой пул они будут использовать для параллельной обработки, но в текущей реализации не следует использовать ForkJoinPool.commonPool(), но вместо этого создайте новый пул:

ForkJoinPool pool = new ForkJoinPool(2);

pool().submit(() -> {
mySet
    .parallelStream()
    ... // do my fancy stuff and collect
})
...