Middle+
Калиди калиди volatile дар Java чист ва чӣ гуна истифода мешавад?
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();
}
}