在执行条件等待时获得异常?

时间:2011-03-10 12:47:30

标签: java monitors

每次我使用监视器运行以下多线程代码时,我都会收到异常。

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

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

由于

1 个答案:

答案 0 :(得分:2)

您正在将旧的内部锁及其信号机制(synchronizedwaitnotify)与新的LockCondition类混合使用,尽管他们没有任何关系。这是一个混乱的来源,所以我坚持其中一个(最好是LockCondition)。

您的问题可能是由于在您拨打signal()时没有按住与该条件相关联的锁定。通过调用lock()unlock():

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

其他synchronized方法也需要做同样的事情。