Siehe einfaches Beispiel unten, dass die Anzahl des Auftretens jedes Wortes in einer Liste zählt:parallele Ströme, Sammler und Thread-Sicherheit
Stream<String> words = Stream.of("a", "b", "a", "c");
Map<String, Integer> wordsCount = words.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
Am Ende wordsCount
ist {a=2, b=1, c=1}
.
Aber mein Strom ist sehr groß, und ich will den Job parallelisieren, so dass ich schreiben:
Map<String, Integer> wordsCount = words.parallel()
.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
aber ich habe bemerkt, dass wordsCount
ist ein einfaches HashMap
so frage ich mich, wenn ich ausdrücklich für eine Notwendigkeit zu fragen, Concurrent Karte Thread-Sicherheit gewährleisten:
Map<String, Integer> wordsCount = words.parallel()
.collect(toConcurrentMap(s -> s, s -> 1,
(i, j) -> i + j));
können nicht gleichzeitige Sammler sicher mit einem Parallelstrom verwendet werden oder soll ich nur die gleichzeitigen Versionen verwenden, wenn sie von einem parallelen Strom zu sammeln?