Sobes.tech
Middle+

Ce este cuvântul cheie volatile în Java și cum se folosește?

sobes.tech AI

Răspuns de la AI

volatile asigură vizibilitatea modificărilor unei variabile pentru toate firele.

  • Garanția de vizibilitate: Când un fir modifică o variabilă volatile, alte fire garantează că vor vedea această modificare. Fără volatile, modificările pot rămâne în cache-ul firului, fără a fi sincronizate cu memoria principală.
  • Nu atomic: volatile nu garantează atomicitatea operațiilor. Operații precum incrementarea (i++) nu sunt atomice și pot duce la condiții de cursă chiar și cu volatile.

Este utilizat pentru:

  • Flag-uri de stare: Când un fir setează un flag pentru a informa alte fire despre o anumită stare.
  • Operații simple de citire/scriere: Când operațiile asupra variabilei constau într-o singură scriere de către un fir și multiple citiri de către altele.

Exemplu de utilizare cu un flag:

// Exemplu de utilizare a volatile pentru un flag de terminare
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Lucru în fir
                System.out.println("Firul rulează...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Firul s-a terminat.");
        }).start();
    }

    public void stop() {
        terminated = true; // Schimbare în variabila volatile
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileExample example = new VolatileExample();
        example.start();
        Thread.sleep(500);
        example.stop();
    }
}