Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14222|Răspunde: 0

[Comunicare] Informații despre tipurile de bază de securitate a thread-urilor Java și I++

[Copiază linkul]
Postat pe 05.04.2015 22:17:45 | | |

În Java, celelalte variabile de bază sunt atomice, cu excepția variabilelor de 8 octeți și 64 de biți Long și Double.


Modelul de stocare Java necesită ca atât operațiunile de obținere, cât și cele de stocare să fie atomice, dar pentru variabile lungi și duble nevolatile, JVM-ul permite împărțirea unei citiri sau scrieri pe 64 de biți în două operații de 32 de biți.

Dacă citirea și scrierea au loc pe fire diferite, citirea unui tip nevolatil lung poate duce la un număr mare de 32 de biți pentru o valoare și un minim de 32 de biți pentru cealaltă.

Deci, chiar dacă nu te interesează datele expirate, s-ar putea să nu fie sigur să folosești variabile lungi și duble partajate, mutabile într-un program multithreaded, decât dacă acestea sunt declarate volatile sau protejate cu blocare.


Vorbind despre operațiuni atomice, înseamnă că cititul și scrisul sunt atomice, cum ar fi i=5; Aceasta este o operațiune atomică.

Totuși, dacă funcționarea a doi atomi se realizează împreună, nu este neapărat atomică, cum ar fi citirea mai întâi și apoi scrierea, atunci este posibil ca variabila să fi fost modificată după citire.

i++ este o astfel de operație, citiți mai întâi și apoi scrieți, deci variabila întreg este atomică, nu că i++ este o operație atomică.

Când folosești for(int i=0; i<10000; i++){System.out.print(i)}

Vei observa că nu voi tipări 10.000 în final și voi tipări cam 8-9 mii.


Dar în cazul multi-threading-ului, chiar dacă variabila întreagă este atomică, pot apărea probleme de siguranță a firului, ceea ce este o problemă de vizibilitate a firului, așa că trebuie să adaugi o afirmație volatilă.

Acest modificator este o variabilă forțată care este citită din memorie de fiecare dată și nu este stocată în registre.




Precedent:SQL 2008 afișează un mesaj de eroare (furnizor: SQL Network Interfaces, eroare: 25 - Cuvânt de conexiune).
Următor:[Fast and Furious 7] lansează DVD-ul 2.12G Cea mai clară versiune de pe Internet
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com