This commit is contained in:
chenyan 2022-12-30 04:36:30 +08:00
parent 96710d330d
commit 97ff76f97f
1 changed files with 1 additions and 1 deletions

View File

@ -73,7 +73,7 @@ markWord 是多种数据混用的一个区域有2个比特的标志位
--
synchronized 对 java Object 的加锁,就操作了 markWord 区域,把数据设置成一个指针,指向一个 ObjectMonitor c++对象。这个c++对象里就保存了 当前锁的拥有者线程、抢锁的线程集合、锁的重入次数 等等。
synchronized 对 java Object 的加锁,就操作了 markWord 区域,把数据设置成一个指针,指向一个 ObjectMonitor c++对象。这个c++对象里就保存了 当前锁的拥有者线程Owner、抢锁的线程集合、锁的重入次数 等等。markWord 区域原本的数据转存到 Owner 指向的线程里的 LockRecord 区域。
这已经到 jvm 的 c++ 代码了,没法看得太深。不过已经可以联想到一些推论了。比如 wait()、 notify() 为什么都是 java Object 提供的方法? 因为它们操作的就是 java Object 关联的 c++ ObjectMonitor 里保存的线程集合。比如 wait()、 notify() 都只在 synchronized 代码块里面调用。