File tree Expand file tree Collapse file tree 1 file changed +4
-4
lines changed
Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Original file line number Diff line number Diff line change @@ -75,15 +75,15 @@ synchronize 很多都称之为重量锁,`JDK1.6` 中对 synchronize 进行了
7575
7676
7777### 轻量锁
78- 当代码进入同步块时,如果同步对象为无锁状态时,当前线程会在栈帧中创建一个锁记录(` Lock Record ` )区域,同时将锁对象的对象头中 Mark Word 拷贝到锁记录中。 再尝试使用 CAS 将 Mark Word 更新为指向锁记录的指针。
78+ 当代码进入同步块时,如果同步对象为无锁状态时,当前线程会在栈帧中创建一个锁记录(` Lock Record ` )区域,同时将锁对象的对象头中 Mark Word 拷贝到锁记录中, 再尝试使用 CAS 将 Mark Word 更新为指向锁记录的指针。
7979
80- 如果更新成功 ,当前线程就获得了锁。
80+ 如果更新 ** 成功 ** ,当前线程就获得了锁。
8181
82- 如果更新失败 JVM 会先检查锁对象的 ` Mark Word ` 是否指向当前线程的锁记录。
82+ 如果更新 ** 失败 ** JVM 会先检查锁对象的 ` Mark Word ` 是否指向当前线程的锁记录。
8383
8484如果是则说明当前线程拥有锁对象的锁,可以直接进入同步块。
8585
86- 不是则说明有其他线程抢占了锁,如果存在多个线程同时竞争一把锁,轻量锁就会膨胀为重量锁。
86+ 不是则说明有其他线程抢占了锁,如果存在多个线程同时竞争一把锁,** 轻量锁就会膨胀为重量锁** 。
8787
8888#### 解锁
8989轻量锁的解锁过程也是利用 CAS 来实现的,会尝试锁记录替换回锁对象的 Mark Word 。如果替换成功则说明整个同步操作完成,失败则说明有其他线程尝试获取锁,这时就会唤醒被挂起的线程(此时已经膨胀为` 重量锁 ` )
You can’t perform that action at this time.
0 commit comments