Chciałbym żeby wszystkie wątki wykonały pewien fragment kodu. Co przyszło 1 na myśl- parralelStream.
No i zaczynam od testów jak to działa i tu bęc, zaskoczenie.
Mam listę wypełnioną jakimiś obiektami, robię na niej parallelStream coś przerabiam i tworzę nowe obiekty które dodaje do listy(lista pusta przed operacją parallelStream).
No i teraz:
Spodziewałbym się, że ta druga lista będzie miała taki sam rozmiar i jak przetwarzam na zwykłym streamie oczywiście tak jest.
Przy parallel - ta druga lista to jakieś 90% tej pierwszej.
Kod wygląda mniej więcej tak:
list.parallelStream().forEach(w -> {
Person person = new Person(w,w+"");
list2.add(person);
});
Pytanie chyba oczywiste :)
Dlaczego tak się dzieje?
CopyOnWriteSomethingSomething