新しい条件を作成chopstickFree
し、pickUpChopstick()
メソッドでロックを待っていますが、まったくアクセスできません。
デバッグを通じて、メソッドのchopstickFree.await()
行に到達すると、無期限に一時停止することがわかりましたpickUpChopstick()
理解できない?コンストラクターのそのコードは、それを機能させるための不確かな試みでしたが、いずれにせよ、新しい条件を作成し、それが解放されていることをすべての人に通知しましたが、まったくロックできませんか?
public class Chopstick {
Lock lock = new ReentrantLock();
private Condition chopstickFree = lock.newCondition();
private Condition chopstickInUse = lock.newCondition();
Chopstick() {
lock.lock();
chopstickFree.signalAll();
lock.unlock();
}
// Pick up chopstick
public void pickUpChopstick() throws InterruptedException {
lock.lock();
try {
chopstickFree.await(); // ALWAYS PAUSES HERE INDEFINITELY
chopstickInUse.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
// Release chopstick
public void releaseChopstick() {
lock.lock();
chopstickFree.signal();
lock.unlock();
}
}
何か案は?
乾杯