Middle
Фарқи байни тағйирёбандаҳои тағйирёбанда ва атомӣ чист?
sobes.tech AI
Ҷавоб аз AI
volatile тәңгәлдә, төрлө потоктар өсөн үҙгәрештәрҙең күренеүсәнлеген тәьмин итә һәм был үҙгәрештәр менән бәйле инструкцияларды компилятор һәм JVM-ға тәртипһеҙ итеп ҡуйыуҙы тыймай. Был гарантиялай, ки, volatile үҙгәреүсе уҡылағанда, поток иң һуңғы яҙылған ҡиммәтте күрә. Әммә volatile берләштерелгән операцияларҙың атомарлығын гарантиялмай (мәҫәлән, инкремент).
java.util.concurrent.atomic пакетынан атомар классылар (мәҫәлән, AtomicInteger, AtomicLong, AtomicReference) түбәндәге атомар операцияларҙы ҡуллана, улар аппаратлы дәрәжәлә башҡарыла. Улар уҡыла, үҙгәртелә һәм яҙыла торған операцияларҙы атомарлы итеп башҡара, synchronized ҡулланмайынса.
Сравнение:
| Үҙенсәлек | volatile |
Атомар переменная (AtomicInteger һ.б.) |
|---|---|---|
| Атомарлыҡ | Берләштерелгән операцияларҙың атомарлығын гарантиялмай. | Операцияларҙың атомарлығын гарантиялай (CAS). |
| Күренеүсәнлек | Үҙгәрештәрҙең башҡа потоктарға күренеүен гарантиялай. | CAS-тың ҡушымта һөҙөмтәһе булараҡ күренеүен гарантиялай. |
| Ҡулланыу | Һөҙөмтәле уҡырға/яҙыуға күренеү өсөн. | Инкремент, CAS кеүек атомар операциялар өсөн. |
| Харажаттар | synchronized-ҡа ҡарағанда кәмерәк. |
Ғәҙәттә synchronized-ҡа ҡарағанда кәмерәк, түбән конкуренция шарттарында. |
volatile ҡулланыу мисалы:
class SharedData {
volatile boolean flag = false; // flag үҙгәрешен күренеүсән итә
public void setFlag() {
flag = true;
}
public boolean isFlag() {
return flag;
}
}
AtomicInteger ҡулланыу мисалы:
import java.util.concurrent.atomic.AtomicInteger;
class Counter {
AtomicInteger count = new AtomicInteger(0); // Атомар һанасҡы
public void increment() {
count.incrementAndGet(); // Атомар инкремент
}
public int getCount() {
return count.get();
}
}