volatile
是干啥用的,有什么含义和特点呢?
- 当一个共享变量被
volatile
修饰时,它就具备了“可见性”,即这个变量被一个线程修改时,这个改变会立即被其他线程知道。 - 当一个共享变量被
volatile
修饰时,会禁止“指令重排序”。
volatile
关键字会产生什么效果呢?
- 使用
volatile
关键字会强制将变量的修改的值立即写至主内存; - 使用
volatile
关键字,当线程2对变量stop
修改时,会强制将所有用到stop
变量的线程对应的缓存中stop
的缓存行置为无效。 - 由于线程1的
stop
缓存行无效,所以在运行时线程1会读取主存中stop
变量的值。
所以到最后线程1
读取到的就是stop
最新的值。