We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 2581e51 commit 63d7667Copy full SHA for 63d7667
1 file changed
MD/Synchronize.md
@@ -78,6 +78,15 @@ synchronize 很多都称之为重量锁,`JDK1.6` 中对 synchronize 进行了
78
### 轻量级锁
79
当代码进入同步块时,如果同步对象为无锁状态时,当前线程会在栈帧中穿件一个锁记录(`Lock Record`)区域,同时将锁对象对象头中的 Mark Word 拷贝到锁记录中。再尝试使用 CAS 将 Mark Word 更新为指向锁记录的指针。
80
81
-如果更新成功,当前线程就获得了锁。如果更新失败 JVM 会先检查锁对象的 `Mark Word` 是否指向当前线程的锁记录。
+如果更新成功,当前线程就获得了锁。
82
83
-如果是则说明当前线程拥有锁对象的锁,可以直接进入同步块。
+如果更新失败 JVM 会先检查锁对象的 `Mark Word` 是否指向当前线程的锁记录。
84
+
85
+如果是则说明当前线程拥有锁对象的锁,可以直接进入同步块。
86
87
+不是则说明有其他线程抢占了锁,如果存在多个线程同时竞争一把锁,轻量锁就会膨胀为重量锁。
88
89
+#### 解锁
90
+轻量锁的解锁过程也是利用 CAS 来实现的,会尝试锁记录替换回锁对象的 Mark Word 。如果替换成功则说明整个同步操作完成,失败则说明有其他线程尝试获取锁,这时就会唤醒被挂起的线程(此时已经膨胀为`重量锁`)
91
92
+轻量锁能提升性能的原因是:认为大多数锁在整个同步周期都不存在竞争。
0 commit comments