如何建立處理器池之享元模式
最近在看tomcat原始碼的時候發現裡面有很多經典設計模式的運用案例,正好趁此機會熟悉一下設計模式,為了保證程式碼原味性,就直接複製貼上了,以下程式碼不能執行,但是能看明白,可以用來學習和借鑑。
相關設計模式:享元模式
//最少處理器個數
protected int minProcessors = 5;
//最大處理器個數
private int maxProcessors = 20;
//當前處理器個數
private int curProcessors = 0;
//用於存放使用完的處理器
private Stack<Object> processors = new Stack<Object>();
//用於存放新建立的處理器
private Vector<Object> created = new Vector<Object>();
/**
* 處理器使用完以後將處理器加入處理器池中,
* @author fjding
* @date 2016年4月18日 下午10:04:54
* @param processor
* =================Modify Record=================
* @Modifier @date @Content
* fjding 2016年4月18日 下午10:04:54 新建
*
*/
private void recycle(HttpProcessor processor) {
processors.push(processor);
}
//
/**
* 通過該方法可以獲得處理器池中的執行緒
* @author fjding
* @date 2016年4月18日 下午10:05:59
* @return
* =================Modify Record=================
* @Modifier @date @Content
* fjding 2016年4月18日 下午10:05:59 新建
*
*/
private HttpProcessor createProcessor() {
synchronized (processors) {
//池中有處理器可用
if (processors.size() > 0) {
return ((HttpProcessor) processors.pop());
}
//如果處理器池中沒有可以用的處理器,則判斷當前的處理器個數(此時池中是空的)是否大於設定最大處理器個數,
if ((maxProcessors > 0) && (curProcessors < maxProcessors)) {
//沒有則建立
return (newProcessor());
} else {
//如果處理器最大個數被設定為-1,則要多少個處理器就建立多少個,不受限制
if (maxProcessors < 0) {
return (newProcessor());
} else {
return (null);
}
}
}
}
/**
* 建立一個新的處理器
* @author fjding
* @date 2016年4月18日 下午10:25:36
* @return
* =================Modify Record=================
* @Modifier @date @Content
* fjding 2016年4月18日 下午10:25:36 新建
*
*/
private HttpProcessor newProcessor() {
//當建立一個處理器,則當前處理器標記加1,給改處理器設定了個名字,執行緒也是這麼做的
HttpProcessor processor = new HttpProcessor(this, curProcessors++);
if (processor instanceof Lifecycle) {
try {
((Lifecycle) processor).start();
} catch (Exception e) {
log("newProcessor", e);
return (null);
}
}
created.addElement(processor);
return (processor);
}
相關文章
- 物件池與享元模式物件模式
- 設計模式之享元模式設計模式
- Java設計模式之(十一)——享元模式Java設計模式
- C#設計模式之享元模式C#設計模式
- 我學設計模式 之 享元模式設計模式
- Java學設計模式之享元模式Java設計模式
- 享元模式模式
- 11.java設計模式之享元模式Java設計模式
- 設計模式(十二)——享元模式(Integer緩衝池原始碼分析)設計模式原始碼
- 六、享元模式模式
- 享元模式初探模式
- Java設計模式之七 —– 享元模式和代理模式Java設計模式
- 每天一個設計模式之享元模式設計模式
- 軟體設計模式系列之十三——享元模式設計模式
- Integer.valueof()學習之享元模式模式
- 設計模式----享元模式設計模式
- 設計模式-享元模式設計模式
- 設計模式(十六)----結構型模式之代理享元模式設計模式
- 享元模式(Flyweight)模式
- 設計模式之:享元模式FlyweightPattern的實現設計模式
- 第22章 物件共享,避免建立多物件——享元模式物件模式
- javascript設計模式享元模式JavaScript設計模式
- 設計模式(十七):享元模式設計模式
- Android開發Message原始碼分析【享元模式|物件池】Android原始碼模式物件
- Swift 實戰-享元模式Swift模式
- 享元模式 核心程式碼模式
- 實驗13:享元模式模式
- 設計模式系列13–享元模式設計模式
- 【大道模式】享元模式-FlyWeight Pattern模式
- 極簡設計模式-享元模式設計模式
- Python設計模式-享元模式Python設計模式
- Java設計模式11——享元模式Java設計模式
- iOS設計模式 (四)享元模式iOS設計模式
- 軟體設計模式————(享元模式)設計模式
- Java進階篇設計模式之七 —– 享元模式和代理模式Java設計模式
- Java進階篇設計模式之七 ----- 享元模式和代理模式Java設計模式
- 好程式設計師分享java設計模式之享元模式程式設計師Java設計模式
- C#設計模式(13)——享元模式C#設計模式