はい、同期ロック構文はブロック構造であるため簡単ですが、使用できない場合があります。「同期」の以前の使用法と互換性があるように、オブジェクトの「同期」モニターを明示的にロックおよびロック解除する方法はありますか?
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();
}
もちろん、この例では、「クロージャー」はこの必要性を排除します。「スタック スコープ」デストラクタと同様に;^>