💡
原文中文,约2200字,阅读约需6分钟。
📝
内容提要
Java中的volatile关键字解决多线程/多处理器环境下的可见性和指令重排问题。它保证了跨线程的内存一致性,通过禁止指令重排来保证程序正确性。
🎯
关键要点
- Java中的volatile关键字解决多线程/多处理器环境下的可见性和指令重排问题。
- CPU的多核心时代使得程序不能天然地同时在多个CPU核心上运行。
- 单核心架构下的内存模型是顺序一致性,所有线程所看见的执行顺序是一样的。
- 多核心时代可能导致不同核心读取到旧值,造成严重问题。
- 解决方案一是保证主内存顺序一致性,但会导致性能大幅下降。
- 解决方案二是硬件层保证单线程程序的顺序一致性,跨线程内存默认不保证一致性。
- Java的volatile语义提供可见性保证和禁止指令重排,确保多线程环境下的正确性。
- volatile的读写之间不能重排序,以避免线程间的数据不一致问题。
➡️