【并发编程篇19】导致并发程序出现问题的根本原因

30 阅读1分钟

java并发编程三大特性

  • 原子性
  • 可见性
  • 有序性
  1. 原子性:一个线程在CPU中操作不可暂停,也不可中断,要不执行完成,要不不执行

image.png

解决方案: synchronized、lock

  1. 内存可见性:让一个线程修改共享变量对另一个线程可见

image.png

解决方案: synchrinized、volatile、Lock

  1. 有序性:指令重排,处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致。但它会保证程序最终执行结果和代码程序执行的结果是一致的

image.png

解决方案: volatile