生產者消費者概述和案例演示

2022-09-08 00:21:20 字數 1665 閱讀 9387

案例:牛奶工(生產者)送牛奶,送第幾瓶奶時,消費者就接受第幾瓶,比如送第一瓶奶,消費者就收到第一瓶奶。 使用奶箱(milk box)來作為共享資料區域。

那麼在生產者類中就要有儲存牛奶的方法,消費者就要有獲取牛奶的方法。

奶箱類(milk box),需要對方法新增synchronized關鍵則,否則會發生異常,使用wait()方法來導致執行緒等待,使用notifyall()方法來喚醒執行緒

public

class

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)

public

class producer implements

runnable

@override

public

void

run() }}

消費者類(customer)

public

class 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...