是的,同步锁定语法很容易,因为它是块结构,但有时你不能使用它。有没有办法显式锁定和解锁对象上的“同步”监视器,以便它与“同步”的先前用法兼容?
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();
}
当然,在这个例子中,“闭包”会消除这种需要,就像“堆栈范围”的析构函数一样;^>但是......