java - java中可以显式锁定/解锁对象上的隐式同步锁吗

标签 java synchronization

是的,同步锁定语法很简单,因为它是 block 结构,但有时您无法使用它。有没有办法显式锁定和解锁对象上的“同步”监视器,以便它与“同步”的先前用法兼容?

class MyObj {
    Object locker_ = new Object();
    void lockedMethod() {
       synchronized(locker_) {
           ....
       }
    }
    Iterator lockTraversal() {
        explicitlyWaitForAndAcquireLock(locker_); // assume will not throw exception
        return(getAnIterator());
    }
    void unlockTraversal() {
        explicitlyReleaselock(locker_);
    }
}


 MyObj obj = (...)

 try {
     Iterator it = obj.lockTraversal();
     for(;;) // iterate 
 } finally {
     obj.unlockTraversal();
 }

当然,在这个例子中,“闭包”将消除这种需要,就像“堆栈作用域”析构函数一样;^>但是......

最佳答案

您不能在对象的内在锁上执行此操作,但可以使用 java.util.concurrent.locks.Lock 代替。

如果您确实需要它,感觉有风险,并且不担心可移植性,您也可以使用misc.sun.Unsafe,特别是monitorEnter和monitorExit。但是...可能不是一个好主意。

关于java - java中可以显式锁定/解锁对象上的隐式同步锁吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896235/

相关文章:

java - 为什么同步在第二个代码中不起作用?

java - OKHTTP:如何测量请求和响应中的总字节数?

java - 使用 JavaMail API 在 servicemix 下发送电子邮件时出现 ClassCastException

java - 采访Q : Java Synchronization

c - sem_wait 没有按预期工作?

c++ - MPI 同步 vector 矩阵

java - 为什么我们有时需要在静态方法声明中使用 <E>?

java - 用于迭代 session 变量的 strut 标签

algorithm - OpenJDK :javax.net.ssl.SSLHandshakeException : java. security.cert.CertificateException: 证书不符合算法约束

android - 选择哪一个 : Android Service or Intent Service or Async Task to Sync Files