Synchronizacja dostepu do pól statycznych

0

Naszła mnie taka myśl - czy jeżeli mam wątek i on ma pole statyczne do którego sobie coś zapisuje. I jest inny wątek, który jedynie co robi to odczytuje wartośc tego pola statycznego to chyba nie ma możliwości wysypania się JVM? Nie jestem zmuszony do synchronizacji takiego pola? W najgorszym wypadku będzie hazard i tyle a to mi nie przeszkadza.

A gdyby jednak dwa watki zapisywały coś do takiego statycznego pola to jak podjąć się synchronizacji? Bo stworzenie metody synchronicznej dostępu do pola moze i przeciwdziała powstaniu błędów ale tez zabija chyba sens pola statycznego?

pozdro

0

Specyfikacja JVM mowi ze zapis do zmienych >= 32 bity oraz typow referencjyjnych jest atomowe, natomiast typy 64 bit (double, long) moga nie byc atomowe. W tym ostatnim przypadku musialbys synchronizowac.
Ale sprawdz to w specyfikacji.

0

Przy czym jesli sa to typy >=32 bit lub referencje to nie musi uzywac volatile, a co za tym idzie, pozwoli kompilatorowi na optymalizacje ktore z vilatile sa niemozliwe. Czyli kod moze dzialac po prostu szybciej.

0

Są to booleany i jeden int a na szybkosci mi najbardziej zależy więc już znam odp. Dzięki

0

No tak, tylko pominalem jedno: jesli masz jakies pole czytac / pisac w dwoch watkach, to tak jak donki napisal musisz uzyc volatile, inaczej watki moga czytac zle wartosci. Sory za nieporozumienie ;d

1 użytkowników online, w tym zalogowanych: 0, gości: 1