package demo;
/* * 執行緒間通訊;
* 多個執行緒處理同意資源,但是任務卻不同
* */
/* * 等待/喚醒機制
* 涉及的方法:
* 1·wait():讓執行緒處於凍結狀態,被wait的執行緒會被儲存到執行緒池(容器)中
* 2·notify():喚醒執行緒池中的乙個執行緒(任意)
* 3·notifyall():喚醒執行緒池中的所有執行緒
* 這些方法都必須定義在同步中,因為這些方法時用於操作執行緒狀態的方法,必須要明確
* 到底要操作的是哪個鎖上的執行緒
* */
//為什麼操作執行緒的方法wait(),notify(),notifyall()定義在object類中?
//因為這些方法是監視器的方法。監視器其實就是鎖。鎖可以是任意的物件,
//任意的物件呼叫的方法一定定義在object類中
//資源類
class resource
//輸入類
class input implements runnable
@override
public void run()
catch (interruptedexception e)
if(x==0)
else
r.flag = true;
r.notify();
}x = (x+1)%2;
} } }
//輸出類
class output implements runnable
@override
public void run()
catch (interruptedexception e)
system.out.println(r.name+"..."+r.***);
r.flag = false;
r.notify();
}} }
}public class resourcedemo
}
###優化之後的**
package demoupgraded;
/* * 執行緒間通訊;
* 多個執行緒處理同意資源,但是任務卻不同
* */
/* * 等待/喚醒機制
* 涉及的方法:
* 1·wait():讓執行緒處於凍結狀態,被wait的執行緒會被儲存到執行緒池(容器)中
* 2·notify():喚醒執行緒池中的乙個執行緒(任意)
* 3·notifyall():喚醒執行緒池中的所有執行緒
* 這些方法都必須定義在同步中,因為這些方法時用於操作執行緒狀態的方法,必須要明確
* 到底要操作的是哪個鎖上的執行緒
* */
//為什麼操作執行緒的方法wait(),notify(),notifyall()定義在object類中?
//因為這些方法是監視器的方法。監視器其實就是鎖。鎖可以是任意的物件,
//任意的物件呼叫的方法一定定義在object類中
//資源類
class resource
catch (interruptedexception e)
this.name = name;
this.*** = ***;
flag = true;
notify();
} /*
* 同輸入執行緒一樣,提供向外操作成員變數的介面
* 若標誌位flag為false則輸出執行緒進入等待狀態,等待輸入執行緒的notify喚醒
* 若標誌位flag為true則輸出姓名和性別
* 同時將標誌位flag置為false
* 喚醒輸入執行緒
* */
public synchronized void out()
catch (interruptedexception e)
system.out.println(name+"..."+***);
flag = false;
notify(); }}
//輸入類
class input implements runnable
@override
public void run()
else
x = (x+1)%2;
} } }
//輸出類
class output implements runnable
@override
public void run()
} }public class upgradedresourcedemo
}
java 多執行緒 等待喚醒機制
package thread執行緒 生產者消費者問題 問題1 為什麼要用while而不用if進行判斷 因為是多執行緒在操作同一資源,即有多個生產者也有多個消費者,如果用if進行判斷的話會出現生產者生產連續生產多次,而消費者只消費 消費一次,或生產者生產一次消費者消費多次的錯誤資訊,這是為什麼呢?原因...
java多執行緒等待喚醒機制
等待喚醒機制 object類中提供了三個方法 wait 等待 notify 喚醒單個執行緒 notifyall 喚醒所有執行緒 為什麼這些方法不定義在thread類而定義在object類中呢?這些方法的呼叫必須通過鎖物件呼叫,而我們使用的鎖物件是任意鎖物件。所以,這些方法必須定義在object類中。...
執行緒等待喚醒機制
等待喚醒機制 乙個執行緒在工作時發現某些條件不滿足了,這時可以釋放掉鎖,並暫停工作。目的是讓另乙個執行緒插入進來,進行條件的補給 後進入的執行緒在補足條件後,可以進行 喚醒 將之前所有等待的執行緒喚醒,讓他們繼續工作,然後自己退出。喚醒之後執行的 system.out.println 包子已經做好了...