多執行緒程式設計四 生產消費模型

2021-10-07 13:30:39 字數 1989 閱讀 1852

目錄

1 定義生產者

2 定義消費者

3 定義admin介面

4 synchronizedadmin實現

5 reentrantlockadmin實現

6 測試程式

本次生產消費模型分別用synchronized和reentrantlock實現

思路:分為4部分,主程式、生產銷售管理,生產者執行緒,消費者執行緒。

生產銷售管理中有商品陣列,當前庫存量,生產線方法,消費方法,分別在生產者和消費者run函式呼叫

主程式建立管理系統物件,初始化生產者,消費者,啟動執行緒。

class generator implements runnable 

public void run()

}}

class consumer implements runnable 

public void run()

}}

inte***ce admin
class synchronizedadmin implements admin

//同步鎖實現同步,同步監視器呼叫wait、notify方法實現通訊

public synchronized void generate(string good)

thread.sleep(100);

} catch (interruptedexception e)

goods[goodnum] = good;

goodnum ++;

system.out.println("生產線正在生產第" + goodnum + "個商品,商品名是:" + goods[goodnum - 1]);

//喚醒當前物件池中等待的乙個執行緒。

this.notify();

}public synchronized void consume()

thread.sleep(100);

} catch (interruptedexception e)

system.out.println("正在消費第" + goodnum + "個商品,商品名是:" + goods[goodnum - 1]);

goodnum--;

//喚醒當前物件池中等待的乙個執行緒。

this.notify();

}}

class reentrantlockadmin implements admin 

//重入鎖實現同步,condition的await、signal實現通訊

public void generate(string good)

thread.sleep(100);

goods[goodnum] = good;

goodnum ++;

system.out.println("生產線正在生產第" + goodnum + "個商品,商品名是:" + goods[goodnum - 1]);

//喚醒當前物件池中等待的乙個執行緒。

condition.signal();

} catch (interruptedexception e) finally        

}public void consume()

thread.sleep(100);

system.out.println("正在消費第" + goodnum + "個商品,商品名是:" + goods[goodnum - 1]);

goodnum --;

//喚醒當前物件池中等待的乙個執行緒。

condition.signal();

} catch (interruptedexception e) finally

}}

public static void main(string args)

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

什麼是生產者 消費者模型 一種重要的模型,基於等待 通知機制。生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品,生產者 消費者模型關注的是以下幾個點 生產者 模型作為一種重要的模型,它的優點在於 利用wait notify 實現生產者 消費者模型 既...

多工實現方式 四 生產者與消費者模型

一種重要的模型,基於等待 通知機制。生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品。生產者 消費者模型關注的是以下幾個點 1 生產者與消費者不能同時進行工作,形成的是互斥關係 2 生產者與生產者之間不能同時生產,處於互斥關係 3 消費者與消費者之間...

Java多執行緒五 生產者和消費者模型 單個對單個

假如有乙個資源類resouce,其有乙個屬性name屬性和我們賦予的乙個標識為flag屬性。現在通過啟動多執行緒 其實就是兩個執行緒生產線程和消費執行緒 來達到一邊賦值一邊取值列印的效果。public class resourcepublic class productthread implemen...