Параллельные потоки, коллекторы и безопасность потоков

Смотрите простой пример ниже, который подсчитывает количество вхождений каждого слова в списке:

Stream<String> words = Stream.of("a", "b", "a", "c");
Map<String, Integer> wordsCount = words.collect(toMap(s -> s, s -> 1,
                                                      (i, j) -> i + j));

В конце,wordsCount является{a=2, b=1, c=1}.

Но мой поток очень большой, и я хочу распараллелить работу, поэтому я пишу:

Map<String, Integer> wordsCount = words.parallel()
                                       .collect(toMap(s -> s, s -> 1,
                                                      (i, j) -> i + j));

Однако я заметил, чтоwordsCount это простойHashMap поэтому мне интересно, если мне нужно явно запросить параллельную карту для обеспечения безопасности потока:

Map<String, Integer> wordsCount = words.parallel()
                                       .collect(toConcurrentMap(s -> s, s -> 1,
                                                                (i, j) -> i + j));

Можно ли безопасно использовать не одновременные коллекторы с параллельным потоком или я должен использовать только параллельные версии при сборе из параллельного потока?

Ответы на вопрос(3)

Ваш ответ на вопрос