以下代碼沒有通知線程讀取器執行寫入器,然後終止。這是爲什麼? notifyall
應喚醒處於等待狀態的所有線程。我的線程沒有得到通知,我的程序掛起
public class Testing {
public static void main(String[] args) {
Testing testing=new Testing();
testing.reader.start();
testing.writer.start();
}
Thread reader = new Thread("reader") {
public void run() {
System.out.println("reader started");
synchronized (this) {
try {
wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println("reader " + i);
}
}
};
Thread writer = new Thread("writer") {
public void run() {
System.out.println("writer started");
for (int i = 0; i < 10; i++) {
System.out.println("writer " + i);
}
synchronized (Thread.currentThread()) {
notifyAll();
}
}
};
}
是返回讀線程同時呼籲當前thread.But既不notify和notifyall不會喚醒等待的線程。 –
哎呀!那是一個錯誤。我會將其改正爲作家。事實上,當前返回的線索是作家。您可以幫助我瞭解如何通知讀者線索。 –
如果沒有先確認,在'synchronized'塊中,不要等待的東西沒有發生,就不要調用'wait'。在調用wait後不要確認你正在等待的東西已經發生。 (另外,你的作者調用'notifyAll'而不改變'synchronized'塊中的任何內容,所以沒有什麼可以通知的。) –