对象内部监视器作为java.util.concurrent.Lock



我相信能够将对象的监视器用作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中已经有了

相关内容

最新更新