常見場景:
某個模組負責產生資料,這些資料由另乙個模組來負責處理。產生資料的模組,就形象地稱為生產者;而處理資料的模組,就稱為消費者。
該模式還需要有乙個緩衝區處於生產者和消費者之間,作為乙個中介。生產者把資料放入緩衝區,而消費者從緩衝區取出資料
緩衝區作用
1. 解耦,生產者和消費者只依賴緩衝區,而不互相依賴
2. 支援併發和非同步
方式一,同步佇列
/**方式二,可重入鎖* 生產者、消費者緩衝區
*/public class storage implements istorage catch (interruptedexception e)
}queue.add(obj);
system.out.println("進入緩衝區");
queue.notifyall();}}
@override
public object get() catch (interruptedexception e)
}obj = queue.poll();
system.out.println("離開緩衝區");
queue.notifyall();
}return obj;}}
public class storage implements istorage catch (interruptedexception e)方式三,阻塞佇列}list.add(obj);
system.out.println("進入緩衝區");
empty.signalall();
lock.unlock();
}@override
public object get() catch (interruptedexception e)
}object obj = list.remove();
system.out.println("離開緩衝區");
full.signalall();
lock.unlock();
return obj;}}
public class storage implements istorage catch (interruptedexception e)**system.out.println("進入緩衝區");
}@override
public object get() catch (interruptedexception e)
system.out.println("離開緩衝區");
return obj;}}
設計模式 生產者消費者模式
在併發程式設計中使用生產者和消費者模式能夠解決絕大多數併發問題。該模式通過平衡生產線程和消費執行緒的工作能力來提高程式的整體處理資料的速度。生產者消費者模式是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者 消費者模式
一 我哥們把資料存入redis快取區 生產者 二 我從緩衝器取資料,並作處理!消費者 詳細 如下 取訂單並判斷 redis new redis conn flag redis connect redis translate usefull host,redis translate usefull p...