JMM八大操作 voliate可见性原理

知识储备:

        计算机CPU缓存

        计算机多核处理过程

        计算机主存知识

        线程概念

        计算机指令优化重排序

内存模型-同步八种操作
1:lock:    把主内存变量标识为一条线程独占,此时不允许其他线程对此变量进行读写。
2:unlock:解锁一个主内存变量。
3:read:   把一个主内存变量值读入到线程的工作内存,强调的是读入这个过程。
4:load:   把read到变量值保存到线程工作内存中作为变量副本,强调的是读入的值的保存过程。
5:use:    线程执行期间,把工作内存中的变量值传给字节码执行引擎。
6:assign(赋值):字节码执行引擎把运算结果传回工作内存,赋值给工作内存中的结果变量。
7:store: 把工作内存中的变量值传送到主内存,强调传送的过程。
8:write: 把store传送进来的变量值写入主内存的变量中,强调保存的过程。

同步规则分析:
1)不允许一个线程无原因地(没有发生过任何assign操作)把数据从工作内存同步会主内存中


2)一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load或者assign)的变量。
即就是对一个变量实施use和store操作之前,必须先自行assign和load操作。


3)一个变量在同一时刻只允许一条线程对其进行lock操作,但lock操作可以被同一线程重复执行多次,多次执行lock后,只有执行相同次数的unlock操作,变量才会被解锁。lock和unlock必须成对出现。


4)如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量之前需要重新执行load或assign操作初始化变量的值。


5)如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作;也不允许去unlock一个被其他线程锁定的变量。


6)对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作)

时间仓促后续优化
 

你可能感兴趣的:(JMM八大操作 voliate可见性原理)