方法簽名:public final void wait()throws interruptedexception
導致當前執行緒等待直到另乙個執行緒在這個物件上呼叫notify()方法或者notifyall()方法。換句話說,這個方法的表現就像它簡單的處理呼叫wait(0)方法。
當前執行緒必須擁有這個物件監視器。呼叫之後當前執行緒釋放這個監視器的擁有權並等待直到另乙個執行緒喚醒等待在這個物件的監視器上的多個執行緒,為了喚醒或者呼叫notify方法或者呼叫notifyall方法。然後執行緒等待直到它重新獲取監視器(或者鎖)的擁有權並恢復執行。
在乙個引數版本的情況下,中斷和偽喚醒可能發生,所以這個方法應該總是被用在乙個迴圈中。
synchronized (obj)
這個方法只應該被乙個擁有這個物件的監視器的執行緒呼叫。檢視
notify
方法的描述關於乙個執行緒成為監視器擁有者的方法。
throws:
illegalmonitorstateexception
- 如果當前執行緒不是物件監視器擁有者
interruptedexception
- 如果任何執行緒在之前中斷了當前執行緒或者在當前執行緒等待喚醒時被中斷。中斷狀態在這個異常被丟擲後被清除。
final表明這個方法是不能被子類覆蓋的,所以任何物件呼叫的notify方法都是繼承自object的方法,也就是notify方法一定是object實現的。
喚醒乙個等待在這個物件的監視器上的執行緒。如果若干執行緒等待在這個物件上他們中的乙個會被選擇喚醒。這個選擇是隨機的,由具體實現決定,通過呼叫物件的任意乙個wait方法乙個執行緒就會等待在這個物件的監視器上。
喚醒的執行緒將不能執行直到當前執行緒放棄這個物件上的鎖。喚醒的執行緒會用通常的方式和任何其他可能被啟用的同樣等待在這個物件上的競爭者競爭;例如喚醒的執行緒在成為下乙個鎖上這個物件的執行緒時不會有任何可靠地特權或者不利條件。
這個方法只能被擁有這個物件的監視器的執行緒呼叫。乙個執行緒可以通過如下三種方法獲取到物件的監視器:
1.通過執行乙個物件的同步的例項方法
2.通過執行乙個同步在這個物件上的同步**塊
3.對於類型別物件,通過執行那個類的同步靜態方法。
同一時刻只有乙個執行緒可以擁有乙個物件的監視器。
throws:
illegalmonitorstateexception
- 如果當前執行緒不是這個物件的監視器的擁有者。
目標:子執行緒迴圈10次,接著主線程迴圈100次,接著又回到子執行緒迴圈10次,接著在回到主線程迴圈100次,如此迴圈50次
package com.test;
public class traditionalthreadcommunication
catch (interruptedexception e)
}for (int i = 1; i <= 10; i++)
exchange=false;
traditionalthreadcommunication.class.notify();}}
}}).start();
for (int j = 1; j <= 50; j++)
catch (interruptedexception e)
}for (int i = 1; i <= 100; i++)
exchange=true;
traditionalthreadcommunication.class.notify();}}
}}
package com.test;
public class traditionalthreadcommunication2
}}).start();
for(int i=1;i<=500;i++)}
}class business
catch (interruptedexception e)
}for(int j=1;j<=10;j++)
bshouldsub=false;
this.notify();
}synchronized void main(int i)
catch (interruptedexception e)
}for(int j=1;j<=100;j++)
bshouldsub=true;
this.notify();
}}
黑馬程式設計師 Java 多執行緒
asp.net android ios開發 net培訓 期待與您交流!一.執行緒的定義 1 就是應用程式有多條執行路徑。程序 就是正在執行的程式。執行緒 就是程序的執行路徑,執行單元。2.執行緒與程序的區別 乙個程式啟動至少會有乙個程序,而乙個程序中至少有乙個執行緒.執行緒是程序的乙個實體,是cpu...
黑馬程式設計師 執行緒
多執行緒有兩種實現方法,分別是繼承thread類與實現runnable介面 同步的實現方面有兩種,分別是synchronized,wait與notify wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕...
黑馬程式設計師 執行緒
我理解看來這個這個就是乙個程式可以同時執行不同的 我的理解就是讓程式可以同時執行不同的 至於執行的順序就看系統怎麼調配。第一種方式 繼承thread 第二種方式 1.定義實現runnable介面 2.覆蓋runnable介面當中的run方法 將執行緒要執行的 都放到run方法當中去。3.通過thre...