1.变量可见性,线程共享:volatile 变量,用来确保将变量的更新操作通知到其他线程
2.禁止重排序:在访问 volatile 变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此 volatile 变量是一 种比 sychronized 关键字更轻量级的同步机制
当对非
volatile
变量进行读写的时候,每个线程先从内存拷贝变量到
CPU
缓存中。如果计算机有多个 CPU,每个线程可能在不同的
CPU
上被处理,这意味着每个线程可以拷贝到不同的
CPU cache
中。而 声明变量是 volatile
的,
JVM
保证了每次读变量都从内存中读,跳过
CPU cache
这一步。