Я прочитал в другом сообщении, что после исследования было обнаружено, что операция терминала anyMatch работает таким образом, что каждый поток (работающий на подпотоке) периодически проверяет, нашли результат, и если да, то все остальные потоки будут остановлены.Параллельное поведение потока Java для allMatch, noneMatch, filter и map
Я полагаю, но подумал, что кто-то может проверить, является ли noneMatch
и allMatch
также работают таким образом, так что если при запуске noneMatch
, один поток находит фактическое совпадение, то операция может возвращать ложь. Так что все остальные потоки периодически проверяют это так же, как описано для anyMatch
? Similary, применяется ли обратное значение для allMatch
?
Кроме того, я задавался вопросом, существует ли какая-либо разница при параллельном выполнении операций filter
и map
в отношении того, выполняются ли они по упорядоченному или неупорядоченному потоку. В упорядоченном потоке я предполагаю, что наиболее логичным преимуществом является просто то, что различные потоки могут обрабатывать каждый созданный подпоток, а затем объединить их все вместе в одном порядке. Для неупорядоченного потока, имеет ли это какие-либо преимущества для таких операций, как я изо всех сил пытаюсь думать о них?
Это фантастический ответ - большое спасибо! Итак, чтобы уточнить, allMatch и noneMatch при параллельном запуске будут иметь потоки для каждого подпотока, если другие потоки смогут определить ранний результат? – Tranquility
Кроме того, как найти исходный код для таких методов, как findFirst, через grep? Каким конкретным классом является фактическая реализация этого метода? – Tranquility
@ user3780370, да, другие потоки проверяют на ранний результат в 'allMatch' /' noneMatch'. Grep может помочь, но обычно я использую функции IDE для перехода на JDK-код. И Eclipse, и IDEA могут сделать это довольно удобно. –