This commit is contained in:
parent
96710d330d
commit
97ff76f97f
|
@ -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 代码块里面调用。
|
||||
|
||||
|
|
Loading…
Reference in New Issue