【发布时间】:2017-02-25 07:50:07
【问题描述】:
我正在编写具有多个线程的程序。 在那个程序中,我经常使用 wait 和 notify 让一个线程等待,直到另一个线程唤醒它。
在我的想象项目中,假设我有 3 个线程:m、a 和 b。 m是主要的。 m线程启动一个线程并启动b线程。 m 线程应该等待某个线程完成其工作(不要死)。如果 a 完成,则 m 应该被唤醒并做一件事。如果 b 完成,它应该被唤醒并做另一件事。
我可以在 m 中使用这样的东西:
synchronized(a)
{
a.wait();
}
和类似这样的东西:
synchronized(this)
{
notify();
}
如果我想等待 b,同样的事情也会发生。米:
synchronized(b)
{
b.wait();
}
在乙:
synchronized(this)
{
notify();
}
但是,如果我想同时等待它们,我需要这样的代码:
synchronized(a, b)
{
a,b.wait();
}
当然,这在 java 中是不支持的。
当然,我可以将 main 置于 sleep(32) 或类似的状态,并将完成标志放在 a 和 b 中,当 m 醒来时,它会检查标志,并知道其中一个完成了。 但是通过等待通知方法,我想避免不断检查 a 和 b 中的那些完成标志。
那么,什么是解决方案? 有什么办法,除了不断检查标志外,我可以发现 a 或 b 从 m 完成(没有死)?
【问题讨论】:
-
您的解释有点混乱,
m是应该等待 botha和b完成还是要返回m每次a或b完成他们的工作,b有一个延续或完全不同的东西? -
是的,m 应该等待 a 或 b。 a 和 b 正在做一些多阶段的工作。每当 a 完成一个阶段时,我希望它通知 m。并且每当 b 完成一个阶段时,我也希望它通知 m 。当a通知m时,m应该写“a通知我”,当b通知m时,m应该写“b通知我”。
标签: java multithreading java-threads