To zależy od tego, czy nici, które są czytanie kolekcji rozpoczyna się przed lub po jej wypełnieniu. Jeśli są uruchomione przed wypełnieniem, nie masz żadnych gwarancji (bez synchronizacji), że te wątki zobaczą zaktualizowane wartości.
Powodem tego jest Java pamięci model, jeśli chcesz wiedzieć więcej czytaj sekcję „widoczność” pod tym linkiem: http://gee.cs.oswego.edu/dl/cpj/jmm.html
I nawet jeśli gwinty są uruchamiane po wypełnieniu swojej kolekcji, to może mieć do synchronizacji, ponieważ twoja implementacja kolekcji może zmienić jej wewnętrzny stan nawet podczas operacji odczytu (dzięki Michael Bar-Sinai, nie wiedziałem, że takie kolekcje istnieją w standardowym JDK).
Kolejną bardzo interesującą lekturą na temat współbieżności, obejmującą takie tematy jak publikowanie obiektów, widoczność itp., Jest bardziej szczegółowo książka Briana Goetza: Java Concurrency in Practice.
Ta odpowiedź nie jest błędna, ale również niewystarczająca. Odpowiedź z @WMR ma kilka dodatkowych ważnych zastrzeżeń. W szczególności należy wziąć pod uwagę kwestię upewnienia się, że wątki czytnika będą rzeczywiście wyświetlać wartości zapisane przy uruchomieniu poprzez bezpieczną publikację lub jakąś barierę pamięci. –
Zobacz @ WMR i moje odpowiedzi poniżej ... ta odpowiedź jest błędna, ponieważ() Działania mogą przekształcić stan wewnętrzny w kolekcjach (np. pamięci podręczne, ostatnio pobrane statystyki itp.). –
@Alex Miller: Myślę, że odpowiedź jest nie tylko niewystarczająca, ale wyraźnie mówi "nie" bez wymieniania jakichkolwiek warunków dla tego nie. I to jest złe (i jak pewnie wiesz, niebezpieczne, jeśli na nim polegasz). – WMR