volatile关键字是JVM提供的一种轻量级的同步机制。有主要3中特性:
1.保证可见性,
2.不保证原子性,
3.禁止指令重排(保证有序性)。
下面代码用来验证volatile的可见性:
package com.chaohu;
import java.util.concurrent.TimeUnit;
class MyData {
volatile int number = 0;
public void addTo60(){
this.number = 60;
}
}
public class Test {
public static void main(String[] args) {
MyData myData = new MyData();
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "\t 进来了");
try { TimeUnit.SECONDS.sleep( 3 ); } catch (InterruptedException e){ e.printStackTrace(); }
myData.addTo60();
System.out.println(Thread.currentThread().getName() + "\t 把数据改为:" + myData.number);
},"AAA").start();
while (myData.number == 0){}
System.out.println(Thread.currentThread().getName() + "\t 任务完成");
}
}