是的,同步锁定语法很简单,因为它是 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/