学习JVM原理-19.Java内存模型与并发

摘自《深入理解Java虚拟机》周志明著

JMM(Java Memory Model)是一种统一的内存模型,它屏蔽了各种硬件和操作系统的内存访问差异

它规定:

  1. 所有变量都存储在Main Memory中

  2. 每条线程有自己的Working Memory,里面存有Main Memory变量的副本; 线程只能操作这些副本,不能直接操纵Main Memory里的变量

JMM下的并发过程中有3个问题: Atomicity, Visibility, Ordering

  1. Atomicity: 基本数据类型的读写基本上是原子的;另外可以通过synchornized加锁保证原子性

  2. Visibility: 指变量被一个线程修改后能立即被另一个线程看到。volatile可以实现visibility, 因为用volatile的变量被线程修改后会立即同步到Main Memory中; synchronized关键一般也可以,因为它规定“对一个变量Unlock之前,必须先把变量同步回Main Memory”中

  3. Ordering: JVM会对指令进行重排,后面的代码可能会在前面的代码之前执行。Ordering的意思是,不管指令重排成什么样,最终的结果不受影响。 volatile可以实现ordering,因为它禁止了指令重排; synchronized关键字也可以,因为它通过锁机制保证了线程对同一个资源进行访问的串行性

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.