假設現在有這樣的乙個情況,生產者生產乙個物品的同時要讓消費者取走。
生產者要將自己生產的乙個產品交到乙個公共的區域(**,超市),讓消費者去取走(購買)。
所以這個時候我們要考慮到執行緒同步和執行緒重複取值的乙個問題。
(同步--> synchronized,重複取值--->設定乙個標記值,當達到條件時執行,未滿足條件時等待)
class
messager catch (interruptedexception e)
}this.name = name;
//假設生產花費了一定的時間,產生了時間誤差
try catch (interruptedexception e)
this.note = note;
this.flag = true; //生產完畢,消費者可以取走資料
super.notify(); //喚醒其他等待執行緒
}public synchronized void get() catch (interruptedexception e)
}//假設取走花費了一定的時間
try catch (interruptedexception e)
system.out.println("生產的名稱:"+this.name+"生產的內容:"+this.note);
this.flag = false; //資料已經取走,改變當前標記
super.notify();//喚醒其他等待執行緒
}}class
producter
implements
runnable
@override
public
void run() else}}
}class
consumer
implements
runnable
@override
public
void run()
}}public
class
test
}
經典案例 生產者和消費者
生產者與消費者問題是多執行緒同步的乙個經典問題。生產者和消費者同時使用一塊緩衝區,生產者生產商品放入緩衝區,消費者從緩衝區中取出商品。我們需要保證的是,當緩衝區滿時,生產者不可生產商品 當緩衝區為空時,消費者不可取出商品。wait 與notify 方法 lock與condition機制 blocki...
執行緒通訊的經典案例 生產者和消費者
本程式的核心結構如下 首先定義兩個類 乙個生產者執行緒,另乙個消費者執行緒類,生產者每生產完乙個資料之後,消費者要取走這些資料。現在的資料有兩種 title 小動物,content 草泥馬。title 小金子,content 不是好孩子 範例 基本模型 package thread class me...
生產者和消費者案例
public final void wait throws interruptedexception 丟擲 illegalmonitorstateexception 如果當前執行緒不是此物件監視器的所有者。interruptedexception 如果在當前執行緒等待通知之前或者正在等待通知時,任何...