Middle+
Czym jest słowo kluczowe volatile w Java i jak jest używane?
sobes.tech AI
Odpowiedź od AI
volatile gwarantuje widoczność zmian zmiennej dla wszystkich wątków.
- Gwarancja widoczności: Gdy jeden wątek zmienia zmienną
volatile, inne wątki gwarantują zobaczenie tej zmiany. Bezvolatilezmiany mogą pozostać w pamięci podręcznej wątku, nie synchronizując się z pamięcią główną. - Nie atomowa:
volatilenie gwarantuje atomowości operacji. Operacje typu inkrementacji (i++) nie są atomowe i mogą prowadzić do warunków wyścigu nawet zvolatile.
Używa się do:
- Flagów stanu: Gdy jeden wątek ustawia flagę, aby poinformować inne wątki o jakimś stanie.
- Prostych operacji odczytu/zapisu: Gdy operacje na zmiennej polegają na pojedynczym zapisie przez jeden wątek i wielokrotnym odczycie przez inne.
Przykład użycia z flagą:
// Przykład użycia volatile dla flagi zakończenia
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Praca wątku
System.out.println("Wątek działa...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Wątek zakończony.");
}).start();
}
public void stop() {
terminated = true; // Zmiana zmiennej volatile
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}