設計模式 物件池模式

2021-10-23 07:16:41 字數 1392 閱讀 5555

物件池模式,也稱物件池服務,通過迴圈使用物件,減少資源在初始化和釋放時的昂貴損耗。

簡單地說,在需要時,從池中提取;不用時,放回池中,等待下乙個請求。典型例子是連線池和執行緒池。

//從hashtable中取出空閒元素

public synchronized t checkout()

}return null;

}//歸還物件

public synchronized void checkin(t t)

class objectstatus

//釋放

public void setfree()

//檢查是否可用

public boolean validate()

}//建立池化物件

public abstract t create();

}有乙個專業的新聞追蹤**,最近一段時間內出現偶發性緩慢,從監控情況上看,響應時間在2秒以上。**首頁內容基本都是靜態的(輪詢生成),唯一的動態部分是**的激勵語,如「積一時之跬步,臻千里之遙程」、「業精於勤,荒於嬉;行成於思,毀於隨」等勵志語句,這是乙個簡單的sql隨機查詢結果,表中的數量在5000條左右,而且結構簡單,查詢效能不是問題。

//原語句

@service

public class wisdomprovider

}

在跟蹤過程中,發現高峰期資料庫連線偶爾出現佔滿情況,而且都是查詢該錶(該資料庫的隨機查詢演算法有缺陷),問題找到了:

每一次訪問都會直接查詢資料庫,沒有快取。通常情況下,這沒有問題,但是在高併發的情況下,例如在

10萬pv的壓力下伺服器基本就垮掉了,這是非常嚴重的問題。因此,引入乙個

物件池,把這

5000

條記錄(根據評估最多不超過20000條記錄)在啟動時直接載入到記憶體中,在需要時再從記憶體中取得,以後查詢不再與資料庫互動。

@service 

public class wisdomprovider

public string getoneword()

}

@postconstruct註解的作用是spring容器在啟動完畢後,直接執行init方法,一次性讀取所有的資料,然後在應用執行期間不再與資料庫互動,直接從list列表中獲取資料。完事兒後系統效能大幅提公升,在不增加硬體的情況下,徹底解決了效能問題。

物件池模式

物件池是使用成員變數來儲存生成的物件 1 我需要乙個放入池中的物件 public class teacher 2 我需要池中物件的狀態 public class objectstatus 釋放 public void release 檢查是否可用 return public boolean chec...

物件池模式

31.2 物件池模式 31.2.1 定義和類圖 1 定義 物件池是一種設計模式,它通過管理有限物件復用來共享某些稀少或必須付出昂貴代價的資源。2 類圖 31.2.2 物件池的擴充套件介面 1 兩級物件池方式 空閒物件池和已用物件池 使附加一些屬性 如空閒時間 class 3 空閒物件池 存放目前還沒...

設計模式 執行緒池模式

定義 worker thread的角色 例項應用 利用同步塊來處理,vector容器來儲存客戶端請求。利用vector來儲存,依舊是每次集合的最後乙個位置新增請求,從開始位置移除請求來處理。在channel有快取請求方法和處理請求方法,利用生成者與消費者模式來處理儲存請求,利用正向等待來判斷任務池的...