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