Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象内部监视器为java.util.concurrent.Lock_Java_Multithreading_Locking - Fatal编程技术网

对象内部监视器为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上是不可用的。在安卓系统上有没有其他方法可以做到这一点?