public class MythreadWaitNotify implements Runnable {
int i=0;
String name;
static Object o=new Object();
public MythreadWaitNotify(int i,String name){
this.i=i;
this.name=name;
}
/**
* 兩個房間,先進去的丟鑰匙給另一個人,睡覺。另一個人拿了鑰匙進去,把那個人喊醒,
* 那個人坐着不幹事情,自己做完事情出來再把鑰匙還給他,他再繼續執行下面
*/
public void run() {
if(i==1){
synchronized (o) {
try {
System.out.println(name+"線程扔出鎖等待喚醒");
o.wait(); //!!!!釋放鎖,並且等待喚醒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+"線程接回鎖並繼續執行---------");
}
}
if(i==2){
synchronized (o) {
o.notify(); //!!!!!喚醒等待的線程,但並不釋放鎖,繼續運行完
System.out.println(name+"線程喚醒等待鎖並繼續執行,不釋放鎖");
}
System.out.println(name+"釋放鎖");
}
}
public static void main(String[] args) {
new Thread(new MythreadWaitNotify(1,"線程1")).start();
new Thread(new MythreadWaitNotify(2,"線程2")).start();
}
}
sychronized 同步的等待和喚醒鎖的狀態
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.