Lotna kluczowe w java - przepełnienie stosu w języku rosyjskim

Lotna modyfikator nakłada pewne dodatkowe warunki na zmienną do odczytu / zapisu. Ważne jest, aby zrozumieć dwie rzeczy o zmiennych lotnych:

  1. odczyt / zapis zmiennej lotnego są operacje atomowe.
  2. wynik operacji wartości rekordu w przepływie zmiennym lotnych, to jest widoczne dla wszystkich innych wątków, które są używane do czytania tej zmiennej wartości z niej.

Wydaje się, że osoba wnioskująca pytanie jak twoje, wystarczy znać te dwa punkty.







Nie, nie jest stała. niestabilna, gdyż informuje kompilator, że wartość zmiennej może się zmienić w każdej chwili z innego wątku, a nawet z innych programów, a on nawet nie zauważy. W związku z tym, kompilator przestaje wykonywać różne optymalizacji przez zmienną (na przykład umieszczenie kopii rejestrów) i zawsze odczytuje wartość z pamięci. - konstruktor 10 stycznia '11 w 19:37

Określania słów kluczowych zmiennej lotnych oznacza, że ​​wartość tej zmiennej może być zmieniona przez innych wątków. Aby zrozumieć, co sprawia, że ​​jest niestabilna. przydatna do zrozumienia jak przepływy przetwarzane w zwykłych zmiennych.

W celu poprawienia wydajności specyfikacji języka Java pozwala na zachowanie w lokalnej kopii zmiennej JRE dla każdego strumienia, który odnosi się do niego. Takie „local” kopia zmiennych przypominać przepływ gotówki i pomóc uniknąć odwoływania się do pamięci głównej każdym razem, gdy chcesz uzyskać wartość zmiennej. Podczas uruchamiania dwóch wątków jeden z nich odczytuje 5 jako zmienną A, a drugi - jak 10. Jeśli zmienna A zmieniło się od 5 do 10, pierwszy strumień nie rozpoznaje zmianę i będzie przechowywać błędną wartość A. Jeśli jednak zmienna A jest oznaczony jako lotny , wtedy, gdy przepływ nie jest odczytywane wartości a, będzie on zwrócić się do nadrzędnego kopiować i odczytać jego aktualną wartość. Miejscowy przepływ cache ma sens, jeśli zmienne w aplikacjach nie zostaną zmienione z zewnątrz.







Jeśli zmienna jest zadeklarowana jako zmienna. Oznacza to, że może być zmieniona przez różnych wątków. Jest rzeczą naturalną, aby oczekiwać, że JRE zapewni pewne formy synchronizacji tych lotnych-zmiennych. JRE działa niejawnie zapewnia synchronizację podczas dostępu lotnych-zmienne, ale z jednym bardzo dużym zastrzeżeniem: zmienna zmienna i niestabilna-lotny wjazdu czytanie zsynchronizowane i działanie non-atomowy - nie.

Odpowiedział 16 sierpnia o 18:14 '15

lotnych odniesienia obiektu nie może pisać. Czy mam rację?

Na przykład, gdy jesteśmy w wielowątkowych aplikacji przy użyciu Singleton w których używać synchronizacji i chcesz synchronizować przeprowadzona tylko raz, aby zainicjować obiektu, zamiast za każdym razem nazywamy getInstance (), a następnie użyć lotny modyfikator do odwołania do obiektu:

Odpowiedział 05 kwietnia '16 w 11:50

lotna - dosłownie oznacza latania. niestały. zmienny

w kontekście programowania, oznacza to, że wartość ta może się nagle zmienić, więc nie powinno polegać na wartość tej zmiennej, na przykład, jeśli kod jest napisane,

To nie znaczy, że cykl zakończy się dokładnie w 10 krokach.

Równie dobrze może być tak, że w trakcie cyklu lotnej wartości zmiennej zmieni się w nieoczekiwany sposób (i być może nie zmieni).

odpowiedź jest podana w dniu 13 stycznia o godzinie 6:02 rano







Podobne artykuły