Топ-100Volatile переменная в Java - CodOrbits
LogoCodOrbits

Раздел: Многопоточность

В этом разделе вы узнаете, как использовать многопоточность в Java для повышения производительности и параллельной обработки.

Все разделы
Иконка Многопоточность

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}

Вывод:

Search Icon

Как уже было сказано, если бы i была не volatile, то мы бы не работали непосредственно с переменной i, которая в main, а в каждом потоке бы создавалась копия переменной i и каждый поток работал бы со своей копией i.


Следующие уроки

Метод join в Java

11
мин.

Similar Articles Icon
Divider

Синхронизация в Java с помощью Synchronized

13
мин.

Similar Articles Icon
Divider

Synchronized static в Java

15
мин.

Similar Articles Icon