2015-02-06 149 views
3

我正在使用Apache Commons Pool 2實現爲我的應用程序提供對象池機制。Apache Commons Pool 2中的maxTotal和maxIdle有什麼區別?

截至目前,我已在我的代碼中將maxTotal()maxIdle()的默認值設置爲10

但我無法理解它們之間的區別是什麼?如果我將maxIdle()設置爲非常小(比如說0)或非常大(等於maxTotal())的值?

注意:Apache類在內部推薦默認值8爲上述兩個配置。

回答

11

連接池是一種與無約束數量的同時用戶共享有限數量的數據庫連接的技術。最大連接總數(maxTotal)包括活動連接和空閒連接,即正在使用的連接和當前未使用的連接(它是所有連接的總和)。最大空閒連接(maxIdle)是可以使用的連接(但當前未使用)。如果將maxTotal設置爲100,則一次最多可以向數據庫打開100個連接,如果maxIdle設置爲10,那麼如果沒有連接正在使用,則最多可以釋放90個連接。游泳池將根據需要重新連接

在池中,空閒連接已準備就緒,並且如果連接當前處於空閒狀態(池返回空閒連接),連接請求將不會阻塞。如果沒有連接處於空閒狀態,則該池將阻塞以打開連接或直到連接返回到池。

在你的問題中,最多10人同時打開10個連接,游泳池不會縮小或增長。

+0

感謝您的詳細解釋。 – 2015-02-06 12:42:01

+1

我同意這個徹底的解釋。我會通過使用「數據庫連接」來添加,限制連接池的值。畢竟,一個池可以用於這裏記錄的各種資源。 https://stackoverflow.com/questions/4921642/what-is-object-pooling-in-java – Jerry 2017-07-25 21:35:15