- volatile是一个轻量级的同步机制。不会阻塞线程。
- 保证可见性(被volatile关键字修饰的变量 一个线程修改后的值,所有线程都可见。)
- 不保证原子性(原子性:一个操作或者指令、事务,需要整体的执行成功,要么整体的失败。不能被分割。)
- 禁止指令重排(指令重排:单线程环境下确保最终执行结果和程序顺序执行结果一致。)
- 与synchronized的区别:
- volatile没有synchronized使用的广泛,但是比synchronized轻量级。
- synchronized既能保证可见性,又能保证原子性,而volatile只能保证可见性,无法保证原子性.
- volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized 关键字解决的是多个线程之间访问资源的同步性。
- 从内存可见性角度看,volatile读相当于加锁,volatile写相当于解锁。