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