案例:牛奶工(生產者)送牛奶,送第幾瓶奶時,消費者就接受第幾瓶,比如送第一瓶奶,消費者就收到第一瓶奶。 使用奶箱(milk box)來作為共享資料區域。
那麼在生產者類中就要有儲存牛奶的方法,消費者就要有獲取牛奶的方法。
奶箱類(milk box),需要對方法新增synchronized關鍵則,否則會發生異常,使用wait()方法來導致執行緒等待,使用notifyall()方法來喚醒執行緒
publicclass
milkbox
catch
(interruptedexception e)
}//如果沒有奶就生產奶
this.milk =milk;
system.out.println("送奶工正在將第" + this.milk + "瓶奶放入milk box");
//生產完畢,改變milk box狀態
status = true
;
//喚醒其他等待的執行緒
notifyall();
}//獲取牛奶方法
public
synchronized
void
get()
catch
(interruptedexception e)
}//如果有牛奶,就消費牛奶
system.out.println("使用者拿到第" + this.milk + "瓶milk");
//消費完畢後,修改milk box狀態
status = false
;
//喚醒其他等待的執行緒
notifyall();}}
生產者類(producer)
publicclass producer implements
runnable
@override
public
void
run() }}
消費者類(customer)
publicclass customer implements
runnable
@override
public
void
run() }}
奶箱測試類(milkboxdemo)
public執行結果:class
milkboxdemo
}
生產者和消費者案例
public final void wait throws interruptedexception 丟擲 illegalmonitorstateexception 如果當前執行緒不是此物件監視器的所有者。interruptedexception 如果在當前執行緒等待通知之前或者正在等待通知時,任何...
經典案例 生產者和消費者
生產者與消費者問題是多執行緒同步的乙個經典問題。生產者和消費者同時使用一塊緩衝區,生產者生產商品放入緩衝區,消費者從緩衝區中取出商品。我們需要保證的是,當緩衝區滿時,生產者不可生產商品 當緩衝區為空時,消費者不可取出商品。wait 與notify 方法 lock與condition機制 blocki...
生產者 消費者案例(1)
多執行緒開發中經典的案例。生產者 消費者案例 package com.xiaofeng.example 生產者 消費者案例 author xiaofeng1015 public class theaddemo5 class producter implements runnable override...