variabile volatile

variabile volatile

cuvinte cheie volatile se aplică numai variabile și are următoarele efecte în programarea multifir:

  • 1. Variabila este întotdeauna citit din memoria principală, și niciodată în cache în flux de memorie, și, prin urmare, întotdeauna disponibil pentru orice subiect;
  • 2. Atunci când cererile de citire și scriere de mai multe fluxuri, performanța sistemului este garantată cererile de primă scriere;
  • 3. Atomicitate garantate operațiuni de citire / scriere, deși acest lucru este valabil numai pentru variabile de tip lung și dublu, pentru alte tipuri de aceste acțiuni și așa sunt atomice. Pentru toate celelalte operații, cum ar fi ++, sincronizarea se face din exterior sau de a folosi tipuri atomice, cum ar fi AtomicInteger java.util.concurrent.atomic pachetului;
  • 4. rezultatele în alineatele precedente, fluxurile nu sunt blocate în așteptare pentru eliberarea monitorului;

variabilă obiect poate fi nul.

Mai jos este un exemplu de singleton cu inițializare leneș. Să presupunem că un fir creează o singură instanță. O situație poate apărea în cazul în care instanța a făcut deja referire la obiectul creat, dar fluxul nu a putut ieși din blocul de sincronizare ca sistemul este dat controlul altor fluxuri. În acest caz, fără a volatila pentru toate celelalte fluxuri de exemplu, încă mai este nulă. Și dacă unele fluxuri de asemenea, nevoie de ea, acestea vor fi inactiv.

Un alt exemplu este atunci când un fir trebuie completat de valoarea monitorizată a variabilei în celălalt flux. Ia jocul cu două fluxuri, unul gui flux, un alt ciclu de joc. Să presupunem că atunci când apăsați o anumită ustnavlivaetsya btExit variabilă la true. Dar și fără fir de jocuri volatil poate sări peste această schimbare.

În exemplul următor, fără volatilă și fără System.out.print ( „“), la datele de flux de jocuri de noroc pot fi administrate la infinit (verificat pe Mac). Cu volatile sau System.out.print ( „“), la cererea flux de jocuri de noroc funcționează conform destinației prevăzute: entera terminat după ambele fluxuri.