1、lock表示把一个变量标识为一个线程独占状态
2、unlock表示释放lock的锁定状态,解锁
3、read把主内存的变量读取到工作内存中,方便写入
4、load把read指定读取过来的变量写入到副本中
5、use:把工作内存中的变量传入给执行引擎使用,比如工作变量i,需要被执行引擎执行i+1操作,必须要先让工作内存将i的值传给执行引擎,执行引擎才能使用执行i+1操作
6、assign:表示执行引擎对工作内存中变量进行赋值的时候,将值传入工作内存中,本来工作内存中i变量为1,执行引擎执行了i=3操作后,会将结果3赋值给工作变量中的i
7、store:把工作内存中的变量传给主内存,但并未写入主内存
8、write:把store传过来的变量写入到主内存中对应的变量
java内存模型规定了执行这八种基本操作的时候对应了几个规则
1、不允许从主内存中读取了数据后不载入数据,也不运行把工作内存中的数据传入主内存中后,主内存不写入
2、不允许工作内存中的变量数据改变了后不同步回主内存
3、不允许一个工作内存中的变量没有进行任何修改,又同步回主内存
4、一个新变量必须重主内存中产生
5、一个变量在任何时候都只能被一个线程锁定,不能被多个线程锁定,但是一个线程可以锁定一个变量多次,锁定几次就必须解锁几次
6、没有锁定的变成不允许调用unload操作,就是没有被锁就不能去解锁,也不能去解锁其他线程锁定的变量
7、解锁变量前必须先进行变量的同步,既先同步回主内存中去