На моей машине с Windows у меня 6 ядер.
Я создаю поток из 24 элементов и выполняю операцию над каждым элементом, используя операцию карты в Stream API. Я использую параллелизм:
myCollection.parallelStream()
.map(element -> someTimeConsumingOperation(element)
.collect(toList());
someTimeConsumingOperation имитирует длительную операцию, используя:
Thread.sleep(2000);
myCollection содержит 24 элемента. Я понимаю, что потоки используют исполнитель ForkJoinPool по умолчанию для параллельного выполнения операций, который, в свою очередь, учитывает количество ядер, чтобы определить, сколько потоков должно быть в пуле.
Поскольку есть 6 ядер, я предполагаю, что создается максимум 6 потоков. Если это так, и каждая операция занимает почти 2 секунды, вся обработка потока должна занять около 8 секунд (каждый поток будет выполнять 4 операции, поскольку у нас есть 24 элемента для обработки, следовательно, 4 * 2 секунды).
Но я наблюдаю, что обработка занимает всего 4 секунды.
sleep()
в классеThread
выдаетInterruptedException
. Вы уверены, что каждая трудоемкая операция выполняется ровно две секунды? - person Abra   schedule 03.08.2020