Java多執行緒 生產者與消費者模型

2021-09-19 10:47:59 字數 1360 閱讀 8451

以星巴克點餐為例子,先畫乙個關於生產者與消費者也就是顧客與星巴克工作人員點餐的流程圖,如下:

在併發模型中,星巴克的服務用了第三方解耦的方式,生產者與消費者通過第三方(也就是星巴克中的服務員)聯絡了起來,消費者點餐付款後,會給你一張小票,讓你在取餐區等待有專門的配餐員為你配餐,下一位顧客繼續點餐。通俗來說也是生產者執行緒生產出乙個商品後將由消費者執行緒開始消費,兩兩互相不產生交集。

**如下:

首先建立乙個商品類goods,類中由商品庫存以及生產和消費的方法:

package producers_consumers;

class goods

this.goodsname = goodsname;

this.count = count + 1;

thread.sleep(1000);

system.out.println(tostring());

//生產完商品後通知消費者執行緒可以消費

notify();

}//消費方法

public synchronized void get() throws interruptedexception

//每次消費乙個商品

this.count = this.count - 1;

thread.sleep(1000);

system.out.println(tostring());

//消費完告訴生產者執行緒可以繼續生產了

notify();

}@override

public string tostring() ';}}

然後建立生產者和消費者類:

package producers_consumers;

/** * 生產者類

*/class producer implements runnable

@override

public void run() catch (interruptedexception e)

}}/**

* 消費者類

*/class consumer implements runnable

@override

public void run() catch (interruptedexception e) }}

測試類:

package producers_consumers;

public class test

}

java多執行緒(生產者 消費者)

if isempty 當生產者生產出來商品需要喚醒消費者消費,可進行如下控制 vector.vector.notify 喚醒消費方法還用到了同步的方法,具體語法如下 synchronized vector.vector 程式源 如下 public class thread01 public stat...

多執行緒 生產者消費者

這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...

java執行緒 生產者與消費者

package h public class test 倉庫 class godown godown int curnum 生產指定數量的產品 param neednum public synchronized void produce int neednum catch interruptedex...