我相信能够将对象的监视器用作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类的解决方案?
Unsafe
类*支持直接操作监视器:
public native void monitorEnter(Object o);
public native void monitorExit(Object o);
public native boolean tryMonitorEnter(Object o);
*在Java 8中有但是我想在Java 7中已经有了