私は3つのスレッド(A、B、C)を持っていますが、それらを希望どおりに動作させることができません。これら3つのスレッドはすべて、同じオブジェクトへの参照を共有します-K。私がやろうとしているのは、3つすべてを起動し、スレッドAが特定の状態に到達した時点で、スレッドBとCを一時停止することです。 Aが何らかのメソッドwork()を実行するまで、そして作業が終了したら、BとCを再開します。
これで、コードに含まれるもの:スレッドAにはBとCの両方への参照があります。BとCにはメソッドpause(){synchronized(K){k.wait;があります。Aがその特定の状態に到達したら、FROM Aのrun()メソッドを呼び出します:B.pause()、C.pause()。今私が期待しているのは、誰かがk.notifyAll()を作成するまで、スレッドBとCは待機するということですが、代わりにスレッドAは停止します。これはJavaでは正常ですか?
コード:
class A implements Runnable {
private K k;
private B b;
private C c;
void run() {
while(something) {
//do something
b.pause();
c.pause();
// !!! here this thread will freeze and doSomething2 wont get executed.
// what i want is to pause B, C, doSomething2 to get executed and then resume B and C
//do something2
synchronized(k) {
k.notifyAll();
}
}
}
}
class B implements Runnable {
private K k;
void run() {
while(something) {
//dome something
}
}
}
public pause() {
synchronized(k) { k.wait();}
}
}
class C implements Runnable {
private K k;
void run() {
while(something) {
//dome something
}
}
}
public pause() {
synchronized(k) { k.wait();}
}
}