Java kiti pagrindiniai kintamieji yra atominiai, išskyrus 8 baitų, 64 bitų kintamuosius Long ir Double.
"Java" saugojimo modelis reikalauja, kad tiek gauti, tiek saugoti operacijos būtų atominės, tačiau nepastoviems ilgiems ir dvigubiems kintamiesiems JVM leidžia padalyti 64 bitų skaitymą arba rašymą į dvi 32 bitų operacijas.
Jei skaitymas ir rašymas vyksta skirtingose gijose, skaitant nepastovaus tipo ilgą gali būti didelis 32 bitų vienos reikšmės ir mažas 32 bitų kitos.
Taigi, net jei jums nerūpi pasibaigę duomenys, gali būti nesaugu naudoti bendrus, kintamus ilgus ir dvigubus kintamuosius kelių gijų programoje, nebent jie būtų paskelbti nepastoviais arba apsaugoti užraktu.
Kalbant apie atomines operacijas, tai reiškia, kad skaitymas ir rašymas yra atominiai, pvz., i=5; Tai yra atominė operacija.
Tačiau jei dviejų atomų veikimas atliekamas kartu, jis nebūtinai yra atominis, pavyzdžiui, pirmiausia skaito, o paskui rašo, tada gali būti, kad po skaitymo kintamasis buvo pakeistas.
i++ yra tokia operacija, pirmiausia perskaitykite, o paskui rašykite, taigi sveikasis kintamasis yra atominis, o ne tai, kad i++ yra atominė operacija.
Kai naudojate for(int i=0; i<10000; i++){System.out.print(i)}
Pamatysite, kad galų gale nespausdinsiu 10 000, o atspausdinsiu apie 8-9 tūkst.
Tačiau kelių gijų atveju, net jei sveikasis kintamasis yra atominis, gali kilti sriegio saugos problemų, o tai yra sriegio matomumo problema, todėl reikia pridėti nepastovų teiginį.
Šis modifikatorius yra priverstinis kintamasis, kuris kiekvieną kartą nuskaitomas iš atminties ir nėra saugomas registruose. |