Возможно ли в любом случае получить «ожидание навсегда» в ThreadA. Я имею в виду, что уведомление выполняется быстрее, чем b.sync.wait();
поток ждет навсегда для случая уведомления
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b.sync)
{
try
{
System.out.println("Waiting for b to complete...");
b.sync.wait();
System.out.println("waiting done");
} catch (InterruptedException e) {}
}
}
}
class ThreadB extends Thread {
int total=0;
Integer sync = new Integer(1);
public void run() {
synchronized(sync)
{
sync.notify();
}
}
}
Это означает, что в моей ситуации, в случае, если мне нужно избегать спать Forewer я должен позвонить b.start() в некоторой ThreadC, ожидая в ThreadA. – vico
@ user1501700 Правильно. В общем случае использование 'wait()' и 'notify()' сегодня обескуражено, так как у нас есть пакет 'java.util.concurrent'. Например, 'CountDownLatch' будет делать то, что вам нужно (' await() 'в A,' countDown() 'in B) без синхронизации. –