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

时间:2014-03-13 10:16:37

标签: java multithreading locking

我认为能够将对象的监视器用作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目前不可能同步不是一个这样的事实)

    < / LI>
  • 是否有使用现有JRE类的解决方案?

  • JSR对此有意义吗?

1 个答案:

答案 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中