-
synchronized 同步语句块的实现应用的是 monitorenter 和 monitorexit 指令,当执行 monitorenter 指令时,线程试图获取锁也就是获取 对象监视器 monitor 的持有权;
- 另外,wait/notify 等办法也依赖于 monitor 对象,这就是为什么只有在同步的块或者办法中能力调用 wait/notify 等办法,否则会抛出 java.lang.IllegalMonitorStateException 的异样的起因。
- 动态 synchronized 办法和非动态 synchronized 办法之间的调用互斥么?不互斥!如果一个线程 A 调用一个实例对象的非动态 synchronized 办法,而线程 B 须要调用这个实例对象所属类的动态 synchronized 办法,是容许的,不会产生互斥景象,因为拜访动态 synchronized 办法占用的锁是以后类的锁,而拜访非动态 synchronized 办法占用的锁是以后实例对象锁。