2011-06-13 109 views
1

對於對象池,我們說每當客戶端請求資源時,我們都會從池中給它。如果我檢出一個資源並更改其狀態並將其檢入。下一個請求會發生什麼情況,池是否讓客戶端檢出此資源或此資源現在對池無效?對象池設計模式問題

回答

1

如果釋放到池中的對象變得無效再使用,則該池會有點毫無意義。如果一個類需要初始化或者重新初始化,你可以在get()或release()池方法中完成。如果重新初始化需要的不僅僅是簡單的分配(例如一個不能在5分鐘內重新使用的套接字對象池),那麼你可能不得不求助於專用的池管理器線程,該線程有效地將池分成幾個水坑 - 可供重複使用的對象和等待重新初始化的對象。

RGDS, 馬丁

0

,或者,你不應該返回資源回池中,直到該資源恢復到原來的狀態。例如,假設您有一個帶有偵聽器線程和10個工作線程池的Web服務器。偵聽器線程接受傳入的http請求並將其分派給工作線程進行處理。池中的工作線程(未檢出)處於其「原始」狀態,即空閒或未處理請求。一旦偵聽器線程檢出一個工作線程並給它一個http請求,工作線程就開始處理請求;換句話說,它的狀態是「工作」。一旦處理完請求併發送了http回覆給客戶端,它就會再次「空閒」並返回到池中。因此,當前沒有檢出池的所有線程始終處於其原始狀態,即「空閒」。