在理解锁机制前,我们需要了解线程安全和并发相关的知识。
Java内存模型
-
lock(锁定):作用于主内存的变量,它把一个变量标识为一个线程独占的状态;
-
unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;
-
read(读取):作用于主内存的变量,它把一个变量的值从主内存传送到线程中的工作内存,以便随后的load动作使用;
-
load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中;
-
use(使用):作用于工作内存的变量,它把工作内存中一个变量的值传递给执行引擎;
-
assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存中的变量;
-
store(存储):作用于工作内存的变量,它把工作内存中的一个变量的值传送到主内存中,以便随后的write操作;
-
write(写入):作用于主内存的变量,它把store操作从工作内存中得到的变量的值写入主内存的变量中。
并发的三个特性
-
原子性
原子性是指不可再分的最小操作指令,即单条机器指令,原子性操作任意时刻只能有一个线程,因此是线程安全的。
Jav