Volatil pentru cuvântul cheie în Java - deversorul stivă în limba rusă
Modificatorul volatil impune unele condiții suplimentare pe variabila de citire / scriere. Este important să se înțeleagă două lucruri despre variabile volatile:
- citire / scriere variabile volatile sunt operații atomice.
- valori record rezultatul operației într-un flux variabil volatile, este vizibil pentru toate celelalte fire, care sunt folosite pentru a citi aceste valori variabile din acestea.
Se pare ca persoana care pune întrebarea cum ar fi a ta, suficient pentru a ști aceste două puncte.
Nu, nu o constantă. volatilă cum spune compilatorului că valoarea variabilei se poate schimba în orice moment de la un alt fir, chiar și de la alte programe, și nici măcar nu a observat. Prin urmare, compilatorul se oprește efectuarea unor optimizări asociate cu această variabilă (de exemplu, introducerea unei copii a registrelor) și întotdeauna citește valoarea din memorie. - ctor 10 ianuarie '11 la 19:37
Determinarea cuvântului cheie variabilă volatilă înseamnă că valoarea acestei variabile poate fi schimbat de către alte fire. Pentru a înțelege ceea ce o face volatil. utile pentru a înțelege modul în care fluxurile prelucrate în variabilele uzuale.
În scopul de a îmbunătăți performanța Java permite specificația limbii pentru păstrarea în copia locală a variabilei JRE pentru fiecare flux, care se referă la el. O astfel de copie „locală“ variabilelor seamănă cu fluxul de numerar și de a ajuta pentru a evita recurgerea la memoria principală de fiecare dată când doriți să obțineți valoarea variabilei. Când se execută două fire unul dintre ele citește 5 ca variabilă A, iar al doilea - cum să 10. Dacă variabila A sa schimbat de la 5 la 10, primul curent nu recunoaște schimbarea și va stoca o valoare greșită A. Cu toate acestea, în cazul în care variabila A este marcat ca fiind volatile . apoi de fiecare dată când debitul nu se citește valorile A, el se va întoarce la maestru de copiere A și citi valoarea sa actuală. fluxul de memorie cache locală are sens în cazul în care variabilele din aplicațiile nu vor fi modificate din exterior.
Dacă variabila este declarată ca volatilă. acest lucru înseamnă că acesta poate fi modificat prin fire diferite. Este firesc să ne așteptăm ca JRE va oferi o formă de sincronizare a acestor variabile volatile. JRE implicit nu oferă sincronizare la accesarea volatile-variabile, dar cu o foarte mare precizare: citire variabilă variabilă de intrare volatile volatil și sincronizate și funcționarea non-atomică - nr.
Răspuns 16 '15 august la 18:14
pentru referințe obiect volatile nu se poate scrie. Am dreptate?
De exemplu, atunci când suntem într-o aplicație multithreaded folosind Singleton model, în care utilizați sincronizarea și doriți să le sincronizați efectuate doar o singură dată pentru a inițializa obiect, mai degrabă decât de fiecare dată când ne numim getInstance (), apoi utilizați modificatorul volatil obiectului de referință:
Răspuns 5 '16 aprilie, la 11:50
volatile - înseamnă literalmente de zbor. nestatornic. mutabil
în contextul programării, acest lucru înseamnă că valoarea se poate schimba brusc, astfel încât să nu ar trebui să se bazeze pe valoarea acestei variabile, de exemplu, în cazul în care codul este scris,
Acest lucru nu înseamnă că ciclul va fi finalizat în exact 10 pași.
Este posibil ca, în cursul valorii volatile ciclu al variabilei se va schimba în moduri neașteptate (și poate nu se va schimba).
răspunsul este dat la 13 ianuarie, la 06:02