转载 https://blog.csdn.net/u012723673/article/details/80682208
特性:
- 保证可见性,不保证原子性
- 禁止指令重排
- 重排序在单线程下一定能保证结果的正确性,但是在多线程环境下,可能发生重排序,影响结果
- 即执行到volatile变量时,其前面的所有语句都执行完,后面所有语句都未执行。且前面语句的结果对volatile变量及其后面语句可见。
单例模式为什么要加volatile
- 单例模式特别常见,比如在aop中,从beanFactroy中获取advice时
AbstractBeanFactoryPointcutAdvisor#getAdvice、MethodSecurityMetadataSourceAdvisor#getAdvice