У меня есть 3 потока (A, B, C), которые я просто не могу заставить их работать так, как я хочу.ВСЕ эти 3 потока разделяют ссылку на один и тот же объект - К. Что я пытаюсь сделать, это запустить все 3 вверх, а затем в какой-то момент времени, когда поток А приходит в определенное состояние, приостанавливать потоки В и С,пока A не выполнит какой-либо метод work () и когда работа завершится, возобновите B и C.
Теперь, что у меня есть в моем коде: поток A ссылается на B и C. B и C имеют метод pause () {synchronized (K) {k.wait;}} Когда A приходит в это определенное состояние, я вызываю из А метод run (): B.pause (), C.pause ().Теперь я ожидаю, что потоки B и C будут ждать до тех пор, пока кто-то не сделает: k.notifyAll (), НО вместо этого поток 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();}
}
}