一、Java内存同步8种操作
1.lock : 作用于主内存的变量,把一个变量标识为一条线程独占的状态
2.unlock : 作用于主内存的变量,把一个处于锁定的状态的变量释放出来,释放后的变量才可以被其他的线程的访问
3.read : 作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作的使用
4.load : 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入到工作内存的变量的副本中
5.use : 作用于工作内存的变量,把工作内存中的一个变量传递给执行引擎
6.assign : 作用于工作内存的变量,它把一个从执行引擎接收到的赋值给工作内存的变量
7.store : 作用于工作内存的变量,把工作内存中的一个变量的值传递到主内存中,以便所有write的操作
8.write : 作用于主内存的变量,它把store操作从工作内存中一个变量的值传递到主内存的变量中
二、线程的安全性的讲解
1.线程安全性包括的内容
a. 原子性 : 提供互斥访问,同一时刻只能有一个线程来对它进行操作 synchronized
b. 可见性 : 一个线程对主内存的修改可以及时的被其他线程观察到 volatile(不具有原子性,禁止指令重排序)
c. 有序性 : 一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序
原文:https://www.cnblogs.com/liunx1109/p/11443664.html