我试图找出一个解决以下问题后复位条件:Java并发保留方法
public void signal(){
//resets condition and signals threads blocked below
}
public void getValue(){
waitOnCondition(); //block if a condition is not met. When signalled, all threads should proceed and get the value
//get value
resetCondition(); //reset condition, so that the next thread that executes this method blocks on the method above
}
我现在面临这个问题似乎很简单,但我很努力,看看如何将所有的边缘情况可以被捕获。
一种解决办法可能是使用Lock
s的Condition
s,则所有的线程witing上waitOnCondition
直到标志被设置为true要await
,然后进行,例如。然后执行signal()
的线程将使用相同的锁,将该标志设置为true并将其设为signal
。然后,释放的线程将重新获取锁以将条件设置为false。但是,这并不能保证所有线程都将达到getValue点。例如:
线程1和2正在等待,获取信号。信号发出后,线程1重新获得锁定,检查条件,现在为真,然后继续。获取该值,获取锁并将条件设置为false。线程2现在看到的情况仍然是错误的,并再次阻止。
另一种解决方案,非常整洁优雅,将使用CountDownLatch
。这保证了所有的线程都将继续。但是,这是不可重置的。任何其他想法或意见?
http://stackoverflow.com/questions/20635844/java-multithreading-awaiting-condition-and-releasing-all-threads – assylias