生產者與消費者模式

下有苏杭 2024-07-19 04:22 21次浏览 0 条评论 taohigo.com

一、什麼是生產者與消費者模式

其實生產者與消費者模式就是一個多線程並發協作的模式,在這個模式中呢,一部分線程被用於去生產數據,另一部分線程去處理數據,於是便有瞭形象的生產者與消費者瞭。而為瞭更好的優化生產者與消費者的關系,便設立一個緩沖區,也就相當於一個數據倉庫,當生產者生產數據時鎖住倉庫,不讓消費者訪問,當消費者消費時鎖住倉庫,不讓生產者訪問倉庫。舉一個簡單的例子,有一個生產者生產包子,他將生產好的包子放到筐中,放完包子由消費者從筐中拿出包子使用。當然筐還有一個作用就是當筐中沒有包子時便鎖住筐,不讓消費者去筐中再拿取東西,當筐中有包子時,不讓生產者再向筐中放入包子。

二、實現生產者與消費者模式

一個簡單的方法就是使用使用Object的wait/notify的消息通知機制

  1. wait():調用瞭wait()方法的線程進入等待池進行等待,等待池中的線程不去競爭對象鎖,直到其它的線程通知,才會進入鎖池
  2. notify():隨機喚醒一個在該對象上等待的線程,被喚醒的線程進行鎖池,開始競爭該對鎖上的鎖
  3. notifyAll():喚醒所有在該對象上等待的線程,優先級高的線程有可能先競爭到,對象鎖隻能在同步方法和同步代碼塊中使用。

簡單的例子:

//創建饅頭對象
class ManTou{
int id;
//創建構造方法
public ManTou(int id) {
super();
this.id = id;
}

}