Skip to content

Commit d33d40e

Browse files
committed
Synchronize
1 parent f347d7c commit d33d40e

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

MD/Synchronize.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,15 @@
44

55
- 同步普通方法,锁的是当前对象。
66
- 同步静态方法,锁的是当前 `Class` 对象。
7-
- 同步块,锁的是 `{}` 中的对象。
7+
- 同步块,锁的是 `{}` 中的对象。
8+
9+
10+
实现原理:
11+
`JVM` 是通过进入、退出对象监视器( `Monitor` )来实现对方法、同步块的同步的。
12+
13+
具体实现是在编译之后在同步方法调用前加入一个 `monitorenter` 指令,在退出方法和异常处插入 `monitorexit` 的指令。
14+
15+
其本质就是对一个对象监视器( `Monitor` )进行获取,而这个获取过程具有排他性从而达到了同一时刻只能一个线程访问的目的。
16+
17+
而对于没有获取到锁的线程将会阻塞到方法入口处,知道获取锁的线程 `monitorexit` 之后才能尝试继续获取锁。
18+

0 commit comments

Comments
 (0)