Volatile переменная в Java
Last updated: 6 мая 2025 г.Для создания общей глобальной переменной, которую будут использовать несколько потоков используется слово volatile
.
Создадим два потока. Первый будет добавлять 1 к глобальной переменной и как только он добавил 1 к глобальной переменной, во втором потоке будет происходить вывод на консоль нового значения глобальной переменной. Этот процесс будет продолжаться пока i не станет 8.
Пример программы:
1public class VolatileExample {
2 static volatile int i;//объявим i volatile
3 public static void main(String[] args) {
4 new MyThread1().start();//запустим потоки
5 new MyThread2().start();
6 }
7 static class MyThread1 extends Thread {
8 @Override
9 public void run() {
10 while(i<8){
11 System.out.println("inc i = " + (++i));
12 try{
13 //Sleep для остановки текущего потока
14 //на заданное количество миллисекунд
15 //в данном случае 100.
16 Thread.sleep(100);
17 }
18 catch(InterruptedException e){}
19 }
20 }
21 }
22 static class MyThread2 extends Thread {
23 @Override
24 public void run() {
25 int localvar = i;
26 while(i<8){
27 if(localvar != i){
28 //Если бы i не был volatile то здесь
29 //была бы копия i и она вечно была
30 //бы 0 и поток бы ничего не вывел.
31 System.out.println("new i = " + i);
32 localvar = i;
33 }
34 }
35 }
36 }
37}
Вывод:

Как уже было сказано, если бы i была не volatile, то мы бы не работали непосредственно с переменной i, которая в main, а в каждом потоке бы создавалась копия переменной i и каждый поток работал бы со своей копией i.
Следующие уроки
Метод join в Java
11
мин.
Синхронизация в Java с помощью Synchronized
13
мин.
Synchronized static в Java
15
мин.