对象内部监视器为java.util.concurrent.Lock
我相信能够使用对象的监视器作为对象内部监视器为java.util.concurrent.Lock,java,multithreading,locking,Java,Multithreading,Locking,我相信能够使用对象的监视器作为锁是非常有用的。即: synchronized(object) { ... } 相当于: lock.lock(); try { ... } finally { lock.unlock(); } 据我所知,使用Lock接口无法实现这一点,因为同步只在块中发生。 我看到的一个解决方案是用额外的方法丰富java.lang.Object public Lock asLock/getIntrinsicMonitorObject(); // Name
锁
是非常有用的。即:
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);
问题:
-
有一些很好的理由现在不可能做到这一点(我认为一些代码< > TyyLoo</代码>目前不可能,同步不是一个)
- 使用现有的JRE类有什么解决方案吗
- 关于这一点的JSR有意义吗
- 不安全的
类*有一些直接操作监视器的支持:
public native void monitorEnter(Object o);
public native void monitorExit(Object o);
public native boolean tryMonitorEnter(Object o);
*这是在Java8中,但我认为它在Java7中已经存在了,我认为您永远不会看到核心对象对Java.util.concurrent
API的这种依赖性。这将严重阻碍为嵌入式应用程序生成最小JDK配置文件的任何尝试。它不必是对象方法Lock Lock=Lock.getMonitorLock(对象)
Java6也已经有了它,就在他们版本的Skillythrow
:)旁边@我从来没有注意过这种方法!伟大的我检查了一下,发现这些不安全的方法在android上是不可用的。在安卓系统上有没有其他方法可以做到这一点?