320 字
2 分钟
Java内存模型
Java内存模型,是Java虚拟机定义的一种规范,用来描述多线程程序中的变量如何在内存中读取数据,何时会把数据写回主内存。
JMM的核心目标是确保多线程环境下的可见性,有序性和原子性,从而避免由于硬件和编译器优化带来的不一致问题。
- 可见性:确保一个线程对共享变量的修改,其他线程能够及时看到。关键字
volatile
是用来保证可见性的,它强制线程每次读写的时候都从主内存中获取最新值。 - 有序性:确保程序执行的顺序符合代码的书写顺序。JMM允许某些指令重排序,来提高性能,但会保证线程内的操作顺序不会被破坏,通过happens-before关系保证跨线程的有序性。
- 原子性:确保操作的不可分割性,要么全部成功,要么全部失败。 例如synchronized关键字能确保方法或者代码块的原子性。
参考
JMM 会把内存分为本地内存和主存,每个线程都有它自己的私有化的本地内存,还有个存储共享数据的主存。