是否有可能在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();
}
}
}
這意味着在我的處境Java Memory Visibility或第17章,萬一我需要避免睡forewer我一定要叫b.start()在一些ThreadC中等待ThreadA。 – vico
@ user1501700沒錯。一般來說,現在不鼓勵使用'wait()'和'notify()',因爲我們有'java.util.concurrent'包。例如,CountDownLatch可以完成你需要的操作(A中的'await()',B中的countDown()),而沒有同步。 –