diff --git a/docs/notes/Java 并发.md b/docs/notes/Java 并发.md
index 9f17a443..9c5b951b 100644
--- a/docs/notes/Java 并发.md
+++ b/docs/notes/Java 并发.md
@@ -1089,7 +1089,7 @@ Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,
Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作。
-
+
- read:把一个变量的值从主内存传输到工作内存中
- load:在 read 之后执行,把 read 得到的值放入工作内存的变量副本中
@@ -1112,11 +1112,11 @@ Java 内存模型保证了 read、load、use、assign、store、write、lock 和
下图演示了两个线程同时对 cnt 进行操作,load、assign、store 这一系列操作整体上看不具备原子性,那么在 T1 修改 cnt 并且还没有将修改后的值写入主内存,T2 依然可以读入旧值。可以看出,这两个线程虽然执行了两次自增运算,但是主内存中 cnt 的值最后为 1 而不是 2。因此对 int 类型读写操作满足原子性只是说明 load、assign、store 这些单个操作具备原子性。
-
+
AtomicInteger 能保证多个线程修改的原子性。
-
+
使用 AtomicInteger 重写之前线程不安全的代码之后得到以下线程安全实现:
@@ -1224,7 +1224,7 @@ volatile 关键字通过添加内存屏障的方式来禁止指令重排,即
在一个线程内,在程序前面的操作先行发生于后面的操作。
-
+
### 2. 管程锁定规则
@@ -1232,7 +1232,7 @@ volatile 关键字通过添加内存屏障的方式来禁止指令重排,即
一个 unlock 操作先行发生于后面对同一个锁的 lock 操作。
-
+
### 3. volatile 变量规则
@@ -1240,7 +1240,7 @@ volatile 关键字通过添加内存屏障的方式来禁止指令重排,即
对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作。
-
+
### 4. 线程启动规则
@@ -1248,7 +1248,8 @@ volatile 关键字通过添加内存屏障的方式来禁止指令重排,即
Thread 对象的 start() 方法调用先行发生于此线程的每一个动作。
-
+
+
### 5. 线程加入规则
@@ -1256,7 +1257,8 @@ Thread 对象的 start() 方法调用先行发生于此线程的每一个动作
Thread 对象的结束先行发生于 join() 方法返回。
-
+
+
### 6. 线程中断规则
@@ -1474,7 +1476,7 @@ public class ThreadLocalExample1 {
它所对应的底层结构图为:
-
+
每个 Thread 都有一个 ThreadLocal.ThreadLocalMap 对象。
diff --git a/docs/pics/2f1c9839-d582-4f75-863e-8f0a2ac63fb8_200.png b/docs/pics/2f1c9839-d582-4f75-863e-8f0a2ac63fb8_200.png
new file mode 100644
index 00000000..a4b20378
Binary files /dev/null and b/docs/pics/2f1c9839-d582-4f75-863e-8f0a2ac63fb8_200.png differ
diff --git a/docs/pics/4dc11e5e-c1d8-4391-be73-337cda32e155_200.png b/docs/pics/4dc11e5e-c1d8-4391-be73-337cda32e155_200.png
new file mode 100644
index 00000000..a5bd2b22
Binary files /dev/null and b/docs/pics/4dc11e5e-c1d8-4391-be73-337cda32e155_200.png differ
diff --git a/docs/pics/693426e6-b057-46a8-bfda-2cf681952756_200.png b/docs/pics/693426e6-b057-46a8-bfda-2cf681952756_200.png
new file mode 100644
index 00000000..0cb973f3
Binary files /dev/null and b/docs/pics/693426e6-b057-46a8-bfda-2cf681952756_200.png differ
diff --git a/docs/pics/89a0024a-7485-4164-bc82-ebdea51f59e0_200.png b/docs/pics/89a0024a-7485-4164-bc82-ebdea51f59e0_200.png
new file mode 100644
index 00000000..11319054
Binary files /dev/null and b/docs/pics/89a0024a-7485-4164-bc82-ebdea51f59e0_200.png differ
diff --git a/docs/pics/cb80b6f8-85bc-442c-979c-63f109311d1f_200.png b/docs/pics/cb80b6f8-85bc-442c-979c-63f109311d1f_200.png
new file mode 100644
index 00000000..e9e08037
Binary files /dev/null and b/docs/pics/cb80b6f8-85bc-442c-979c-63f109311d1f_200.png differ
diff --git a/docs/pics/cc1acfb8-c507-4194-b16a-33388bd1cf82_200.png b/docs/pics/cc1acfb8-c507-4194-b16a-33388bd1cf82_200.png
new file mode 100644
index 00000000..8e016408
Binary files /dev/null and b/docs/pics/cc1acfb8-c507-4194-b16a-33388bd1cf82_200.png differ
diff --git a/docs/pics/e2d2d90f-95eb-4877-9d36-99d7b93695de_200.png b/docs/pics/e2d2d90f-95eb-4877-9d36-99d7b93695de_200.png
new file mode 100644
index 00000000..a7c1778d
Binary files /dev/null and b/docs/pics/e2d2d90f-95eb-4877-9d36-99d7b93695de_200.png differ
diff --git a/docs/pics/e49b6fe9-5ad7-4fe9-975d-dceb10ffe5b4_200.png b/docs/pics/e49b6fe9-5ad7-4fe9-975d-dceb10ffe5b4_200.png
new file mode 100644
index 00000000..dc4aa6cc
Binary files /dev/null and b/docs/pics/e49b6fe9-5ad7-4fe9-975d-dceb10ffe5b4_200.png differ
diff --git a/docs/pics/e8454537-5a0c-49a2-8304-abae0b8887e1_200.png b/docs/pics/e8454537-5a0c-49a2-8304-abae0b8887e1_200.png
new file mode 100644
index 00000000..89ce5c64
Binary files /dev/null and b/docs/pics/e8454537-5a0c-49a2-8304-abae0b8887e1_200.png differ