簡單寫乙個生產者與消費者例子

2021-10-20 17:48:57 字數 1121 閱讀 4739

1、概要:生產者與消費者其實是一種思想或者說是一種**的設計模式,生產者往儲存空間中放入資料,消費者從儲存空間中儲存資料。

2、**:

public class testthread 

class producer extends thread

void producer()

queue.offer(new object());

consumerconditon.signal();

system.out.println("生產者生產了乙個值,目前佇列數量為:" + queue.size());

}}catch (exception ex)finally }}

class consumer extends thread

void consumer()

queue.poll();

producercondition.signal();

system.out.println("消費者消費了乙個值,當前佇列數量為: " + queue.size());

}}catch (exception ex)finally }}

}

3、說明:本例子中我為了更好層現一些生產者與消費者的細節,用了額外定義的lock和condition配合達到條件不滿足阻塞等待和條件滿足通知喚醒執行緒,其實如果用阻塞佇列的話,這些步驟都可以直接用阻塞佇列的put與take特點來實現,不需要自己額外實現。

4、額外插乙個知識點,關於阻塞佇列的不同方法的區別:

(1)插入資料

add()     將指定的元素插入此佇列,如果容量滿了,會丟擲illegalstateexception異常

offer()    將指定的元素插入此佇列,插入成功返回 true;否則返回 false。

put()       如果是blockingqueue,具有該方法,插入資料的時候,如果佇列已滿,會阻塞

(2)取資料

remove() 獲取並移除此佇列的頭,如果此隊列為空,則丟擲nosuchelementexception異常

poll()     獲取並移除此佇列的頭,如果此隊列為空,則返回 null 

take()         獲取並移除此佇列的頭,如果此隊列為空,則阻塞

《生產者與消費者》簡單例子?

package communication 執行結果不太能理解,1 開始消費者呼叫消費方法時處於等待狀態,此時喚起生產者執行緒 生產者開始生產共享資料之後,消費者進行消費,但是當共享資料為空,所有消費者必須等待,生產者繼續生產,然後消費者再次消費 如此迴圈直到程式執行最後,可以看到執行緒一直等待。這...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者與消費者

include include include include include include define size of buffer 10 int buffer size of buffer 緩衝陣列 int in 0,out 0 採用迴圈佇列方式進行陣列的訪問 宣告訊號量 sem t ful...