У меня есть 3 потока (A, B, C), которые я просто не могу заставить их работать, как я их хочу. ВСЕ эти 3 потока имеют ссылку на один и тот же объект - K. То, что я пытаюсь сделать, - это запустить все 3, а затем в некоторый момент времени, когда поток А попадает в определенное состояние, приостанавливает потоки B и C, пока не выполняет какой-то метод работы(), а когда работа заканчивается, резюме B и C.Java Thread Wait-Notify
Теперь то, что я в моем коде: Thread а имеет ссылку на как B и C. B и C есть метод pause() {synchronized (K) {k.wait; }} Когда A прибывает в определенном состоянии, я вызываю метод run() FROM A: B.pause(), C.pause(). Теперь то, что я ожидаю, это то, что Threads B и C будут waiT до тех пор, пока кто-то не сделает: k.notifyAll(), НО вместо Thread 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();}
}
}
Чтобы сделать это obviou что происходит. В классе B.run введите System.out.println (Thread.currentThread(). GetId()); и в B.pause делать то же самое. K.wait() на самом деле ждет другого потока (как говорили другие участники) –
Когда вы говорите паузу, вы имеете в виду немедленно остановиться или закончить то, что вы делаете, тогда остановитесь и подождите, пока я не скажу, что вы можете продолжить? – BigMac66