Middle+
Javaда volatile ачкыч сөзү эмне жана ал кандайча колдонулат?
sobes.tech AI
AIден жооп
volatile бардык ағындар үчүн өзгөрмөнүн өзгөрүүлөрүнүн көрүнүшүн камсыздайт.
- Көрүнүш кепилдиги: Бир ағын
volatileөзгөрмөнү өзгөрткөндө, башка ағындар кепилдик менен бул өзгөрүүнү көрөт.volatileжок болсо, өзгөрүүлөр ағындын кэшинде кала алат жана негизги эс тутум менен синхрондоштурулбайт. - Атомар эмес:
volatileоперациялардын атомдуулугун кепилдик бербейт. Мисалы, көбөйтүү (i++) операциялары атомдуулукка ээ эмес жанаvolatileменен да атаандаштык шарттарына алып келиши мүмкүн.
Колдонуу чөйрөлөрү:
- Абалы белгилери: Бир ағын белгилерди коюп, башка ағындарга кандайдыр бир абал жөнүндө кабарлоо үчүн.
- Жай гана окуу/жазуу операциялары: Өзгөрмө боюнча операциялар бир жолу жазылып, башка ағындар тарабынан көп жолу окула турганда.
Мисал:
// Аякталышы үчүн `volatile` белгилерди колдонуу мисалы
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Ағындын иши
System.out.println("Ағын иштеп жатат...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Ағын аяктады.");
}).start();
}
public void stop() {
terminated = true; // `volatile` өзгөрмөдө өзгөртүү
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}