【发布时间】:2012-06-23 03:53:32
【问题描述】:
我有一个包含许多线程的程序,让我们以六个线程为例。其中五个应该能够同时使用给定资源,但如果给定条件发生,最后一个线程不应该,并且应该等到该条件结束。
据我了解,不能使用 ReentrantLock,因为它一次只能由一个线程持有。另一方面,信号量可以同时被多个线程持有,但我找不到将条件附加到获取方法的方法。
这个高级对象能否解决问题,或者我将不得不使用通知来实现这个功能并直接等待?
例如。
class A{
getResource{ ... }
}
//This Runable could be spawn many times at the same time
class B implements Runnable{
run {
setConditionToTrue
getResource
...
getResource
...
getResource
setConditionToFalse
}
}
//This will be working forever but only one Thread
class C implements Runnable{
run{
loop{
if(Condition == true) wait
getResource
}
}
}
提前感谢各位朋友
【问题讨论】:
标签: java scala locking semaphore synchronizing