我认为能够将对象的监视器用作Lock
非常有用。那就是:
synchronized(object) {
...
}
相当于:
lock.lock();
try {
...
} finally {
lock.unlock();
}
据我所知,使用Lock
接口无法实现此目的,因为同步仅在块中发生。
我看到的一个解决方案是使java.lang.Object
增加一个额外的方法
public Lock asLock/getIntrinsicMonitorObject(); // Name isn't perfect but i'm not asking for that
或类似的东西:
LockSupport.getIntrinsicMonitorObject(Object of);
问题:
是否有一些充分的理由暂时无法做到这一点(我认为某些tryLock
目前不可能同步不是一个这样的事实)
是否有使用现有JRE类的解决方案?
JSR对此有意义吗?
答案 0 :(得分:2)
Unsafe
类*支持直接操作监视器:
public native void monitorEnter(Object o);
public native void monitorExit(Object o);
public native boolean tryMonitorEnter(Object o);
*在Java 8中,但我认为它已经存在于Java 7中