1. 作用
volatile 修饰的变量 具有线程可见性。内存结构分为私有堆栈和公共堆栈。正常访问(修改),是访问(修改)本线程内的私有堆栈,实际对变量所属线程并未影响,如果希望修改,那就必须将变量提升为其他线程可见,即volatile,强制从公共堆栈中取值
2. 特点
- volatile关键字是线程同步的轻量级实现,所以volatile比synchronized性能高,但是volatile无法保证原子性。
- volatile不会发生阻塞,synchronized会发生阻塞
- volatile无法保证原子性,但是synchronized既可保证原子性,也间接的保证了可见性,他会将私有内存和公共内存中的数据做同步
- 一段 synchronized(x){}表达式即可保证私有内存和公共内存的数据同步
3. 原子类
原子类只是在方法内保持原子性