1、简介
volatile是轻量级的synchronized,不会引起线程上下文的切换和调度,因此使用和执行成本更低。
2、Volatile特性
2.1、Volatile保证可见性
- 当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值
- 对一个volatile变量的读,总是能看到任意线程对这个volatile变量最后的写入
2.1.1、可见性举例
下面用一个例子来说明:
线程t1中进行循环,直到tag变成true时才退出,线程t2负责将tag更新为true,先开始t1,后开始t2
public class VolatileTest {
boolean tag = false;
@Test
public void visibleTest() throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
//当tag标志变为true时结束循环并打印退出信息
while(!tag){
}
System.out.println("tag is true,exit......");
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
tag