多くのスレッドを保持するプログラムがあります。例として 6 つのスレッドを挙げましょう。そのうちの 5 つは特定のリソースを同時に使用できるはずですが、特定の条件が発生した場合、最後のスレッドは使用できず、その条件が終了するまで待機する必要があります。
私の理解では、ReentrantLock は一度に 1 つのスレッドしか保持できないため、使用できません。一方、セマフォは一度に多くのスレッドで保持できますが、取得メソッドに条件を付ける方法が見つかりません。
この高レベルのオブジェクトはトリックを実行できますか?それとも、通知と待機を直接使用してこの機能を実装する必要がありますか?
例えば。
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
}
}
}
よろしくお願いします