原子性,可见性,顺序性如何保证?

多线程程序运行的安全问题体现在?

  • 原子性
    一个或多个操作在CPU执行的过程中不被中断的特性

  • 可见性
    一个线程对共享变量的修改,另外一个线程能立刻看到

  • 有序性
    程序执行的顺序按照代码的先后顺序执行

    导致原因

    • 线程切换带来的原子性问题
    • 缓存导致的可见性问题
    • 编译优化带来的有序性问题

解决方法

  • JDK Atomic原子类、synchronized、LOCK,可解决原子性问题
  • synchronized、volatile、LOCK,可以解决可见性问题
  • Happens-Before规则可以解决有序性问题