0

每次使用 Monitors 运行以下多线程代码时,我都会遇到异常。

http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d

每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么?

谢谢

4

1 回答 1

2

您将旧的内在锁及其信号机制(synchronized,waitnotify)与新的LockCondition类混合在一起,尽管它们没有任何关系。这是造成混乱的根源,所以我会坚持其中一个(最好是Lockand Condition)。

您的问题可能是由于在调用时未持有与条件关联的锁signal()。用调用lock()和包围方法unlock():

public void canEat(String name) {
   lock.lock();
   try {
       eaters.add(name);
       if (eaters.size() > 0) {
          canFeed.signal();
       }
   } finally {
       lock.unlock();
   }
}

synchronized其他方法也需要这样做。

于 2011-03-10T13:04:30.703 回答