引子:
大家上過操作系統的都知道“生產者-消費者(Producer-Consumer)”模型,主要討論的是進程(線程)間的互斥和同步問題,關鍵是對鎖(lock)的申請、獨占和釋放,在這里我就不羅嗦了。原先我寫的Java代碼如下:


















































































































































雖然Java對信號量及原語做了更高層次的封裝(wait()、notify()、notifyAll()、synchronized{}),但看完上述代碼還是覺得有點麻煩,于是JDK 5在原先collection框架的基礎上增加了java.util.concurrent包,封裝了許多用于線程并發操作的數據結構和操作。其中的BlockingQueue接口就是封裝了一個阻塞隊列的接口,具體地說就是實現了一個用于消費者(多個)和生產者(多個)交換產品的中介,生產者線程在隊列滿時阻塞,消費者線程在隊列空時阻塞,當然在沒有得到鎖之前兩類線程均會阻塞。詳細信息可以參考Java Doc。下面用BlockingQueue實現P-C模型:








































































可以看出代碼中沒有出現wait()或notify()之類的原語操作,這些操作由concurrent框架負責封裝。更全面的討論可以參考《馴服 Tiger: 并發集合》(IBM)