Sobes.tech
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();
    }
}