##主内存和工作内存
java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的细节。这里的变量指的是
实例字段
,静态字段
和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享。自然不会有竞争问题java内存模型规定所有的变量都在主内存中(即方法区和堆中),线程的工作内存中保存了被该线程使用 到的变量的主内存拷贝副本。,线程对变量的修改和使用都必须在自己的工作内存中。
##内存间交互操作
虚拟机为了内存间的交互提供了8种操作,每一种操作都是原子性的。分别为:
- lock
- unlock
- read
- load
- use
- assign
- store
- write
##volatile变量
关键字volatile提供变量对所有线程的可见性,即当一个线程对一个变量进行修改后,另一个线程能马上知道。但是却不一定是线程安全的。
同时使用volatile变量的第二个语义是禁止指令重排优化