Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在等待执行条件时获取异常?_Java_Monitors - Fatal编程技术网

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

Java 在等待执行条件时获取异常?,java,monitors,Java,Monitors,每次使用监视器运行以下多线程代码时,我都会遇到异常 http://pastebin.com/hKvuDX2d 每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么 感谢您将旧的内在锁及其信号机制(同步、等待和通知)与新的锁和条件类混合在一起,尽管它们没有任何关系。这是造成混淆的原因,所以我会坚持使用其中一种(最好是Lock和Condition) 您的问题可能是由于调用signal()时未持有与该条件相关联的锁造成的。通过调用lock

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

http://pastebin.com/hKvuDX2d

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


感谢

您将旧的内在锁及其信号机制(
同步
等待
通知
)与新的
条件
类混合在一起,尽管它们没有任何关系。这是造成混淆的原因,所以我会坚持使用其中一种(最好是
Lock
Condition

您的问题可能是由于调用
signal()
时未持有与该条件相关联的锁造成的。通过调用
lock()
unlock():


其他
同步的
方法也需要这样做。

您能告诉我们您得到的确切异常情况以及监视器的代码吗?我看不到您在哪里使用锁,也看不到代码中的同步。
public void canEat(String name) {
   lock.lock();
   try {
       eaters.add(name);
       if (eaters.size() > 0) {
          canFeed.signal();
       }
   } finally {
       lock.unlock();
   }
}