Chcę wiedzieć, czy tworzenie nowego wątku w Java wyzwala spłukiwanie pamięci podręcznej. Przypuśćmy, że coś jak to zrobić, w tej kolejności:Czy tworzenie nowego wątku ma efekt uboczny opróżniania pamięci podręcznej?
- uruchamiany jest wątek i ustawia zmienną X.
- Gwint tworzy nowy wątek.
- Nowy wątek dostępów X.
Moje pytanie jest takie: czy nowy wątek, albo w momencie jego tworzenia lub w momencie rozpoczyna wykonanie, na pewno zobaczyć aktualizację wykonaną przez X stary wątek w kroku 1? Rozumiem, że jeśli stary wątek zmieni wartość X w przyszłości, nie ma gwarancji, że nowy wątek zobaczy te zmiany. W porządku. Chcę tylko wiedzieć, czy nowy wątek zobaczy właściwe wartości, gdy się uruchomi, bez potrzeby jawnej synchronizacji.
Kiedy po raz pierwszy zdecydowałem się zajrzeć do tego tematu, myślałem, że proste wyszukiwanie google natychmiast ujawni odpowiedź, ale z jakiegoś powodu nie mogę znaleźć żadnego wyniku, który rozwiązuje to pytanie.
Dlaczego polegać na takich niejasnych gwarancje (o ile takie istnieją w wszystko) jeśli możesz po prostu zmienić zmienną "volatile"? – delnan
@delnan: tutaj nie ma nic niejasnego. To zachowanie jest wyraźnie określone w specyfikacji języka Java. –
Teraz bardziej niejasnym pytaniem o gwarancję może być: "Zapisuje X, B stworzony, C czyta X" - czy zachowanie tego jest zdefiniowane? :-) –