![](/img/trans.png)
[英]IllegalMonitorStateException calling wait() on a thread inside its run method (with no synchronized block)
[英]IllegalMonitorStateException inside synchronized block
雖然我已經在同步塊中寫了等待。 我正在獲取IllegalMonitorStateException
。 那是什么原因
package trials;
public class WaitNotifyTrial {
public static void main(String[] args){
Generator g=new Generator();
g.start();
System.out.println("Start");
synchronized (g) {
try {
g.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("Printing exception");
e.printStackTrace();
}
System.out.println(g.value);
}
}
}
class Generator extends Thread{
int value;
public void run(){
synchronized (this) {
value=10;
}
notify();
}
}
}
這些是您的代碼有問題的一些地方:
synchronized (this)
notify()
之外調用notify()
(這是您的直接問題); Thread
實例上使用wait-notify
機制, 建議在其文檔中使用 ; Thread
而不是按原樣使用該類,而僅將Runnable
實現的一個實例傳遞給它。 在將近整整十年的時間里,一般的建議是完全避免使用wait-notify
機制,而應使用java.util.concurrent
一種同步輔助工具,例如CountDownLatch
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.