作用:保证被volatile修饰的共享变量的可见性和有序性,但不能保证原子性。
volatile时关键字轻量锁.通常是用来初始化工做,我们一般在进行读取多,写入少的时候使用。
public class Test {
// 布尔开关
volatile boolean boolValue;
public static void main(String[] args) {
Test t = new Test();
// 启动两个子线程
Thread d1 = new Thread() {
@Override
public void run() {
System.out.println("d1 start");
for (;;) {
t.waitToExit();
}
}
};
d1.start();
Thread d2 = new Thread() {
@Override
public void run() {
System.out.println("d2 start");
for (;;) {
t.swap();
}
}
};
d2.start();
System.out.println("main 执行");
}
public void waitToExit() {
if (boolValue == !boolValue)
System.exit(0);
}
public void swap() {// 不断反复修改boolValue,以期打断线程t1.
boolValue = !boolValue;
}
}
结果:
若将volatile删除,结果则可能会出现: