原子性,可见性,顺序性如何保证?
多线程程序运行的安全问题体现在?
-
原子性
一个或多个操作在CPU执行的过程中不被中断的特性 -
可见性
一个线程对共享变量的修改,另外一个线程能立刻看到 -
有序性
程序执行的顺序按照代码的先后顺序执行导致原因
- 线程切换带来的原子性问题
- 缓存导致的可见性问题
- 编译优化带来的有序性问题
解决方法
- JDK Atomic原子类、synchronized、LOCK,可解决原子性问题
- synchronized、volatile、LOCK,可以解决可见性问题
- Happens-Before规则可以解决有序性问题