Volatile关键字的作用
Volatile关键字的作用主要有如下两个:
1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
2. 顺序一致性:禁止指令重排序。
不保证原子性
一、线程可见性
我们先通过一个例子来看看线程的可见性:
public class VolatileTest {
boolean flag = true;
public void updateFlag() {
this.flag = false;
System.out.println("修改flag值为:" + this.flag);
}
public static void main(String[] args) {
VolatileTest test = new VolatileTest();
new Thread(() -> {
while (test.flag) {
}
System.out.println(Thread.currentThread().getName() + "结束");
}, "Thread1").start();
new Thread(() -> {
try {
Thread.sleep(2000);
test.updateFlag();
} catch