【发布时间】:2015-07-05 03:21:14
【问题描述】:
我有一个问题,我被困了几个小时,我真的不知道如何解决它。这很简单——我有一些线程,其中一个需要等待来自另一个的信号。不知何故,即使我在某个条件下发出信号……什么也没有发生!看起来线程仍在休眠。确实是个很奇怪的问题,不过也有可能是我的错,我没看懂……
这是我的代码的一部分:
@Override
public void bodyProduced() {
lock.lock();
producedBodies++;
if (producedEngines == 0) {
while(producedEngines==0)
{
System.out.println("I am still waiting!");
body.awaitUninterruptibly();
}
System.out.println("I waked up!");
producedBodies--;
producedEngines--;
} else {
engine.signalAll();
}
}
我确定 body.signalAll();当有线程在该条件下等待时调用 - 我检查并调试器多次遍历该行。但是,“我在等待”这行在 thraad 中只出现一次,而“我醒来”则从未出现过......
任何想法,如何解决它,或检查什么?我几乎尝试了所有方法...
感谢您的宝贵时间和帮助!
【问题讨论】:
标签: java multithreading conditional-statements reentrantlock