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