連接超時我要實現我自己的連接池,和我想的連接會自動一些CONNECTION_TIMEOUT後 返回到池中。我怎樣才能達到目的?浮現在腦海併發:實現自定義連接池
一切都在一個單獨的線程使用ScheduledExecutorService的,並且使用的連接每次重新規劃它。
還有其他想法嗎?
連接超時我要實現我自己的連接池,和我想的連接會自動一些CONNECTION_TIMEOUT後 返回到池中。我怎樣才能達到目的?浮現在腦海併發:實現自定義連接池
一切都在一個單獨的線程使用ScheduledExecutorService的,並且使用的連接每次重新規劃它。
還有其他想法嗎?
您可以使用客戶端請願連接池,用於觸發一些動作,例如,檢查當前使用的連接超時,並realease其超時已過期當前使用的連接。你將避免使用新的線程。
如果你的連接池的用戶借來的連接,然後它是用戶的責任,使其返回到池中。連接無法返回到池。
是的,但如果它是非常負載資源,我們不能依賴用戶,因爲它會導致DoS。 即使它是用戶責任,我想找出以這種方式實現它的最佳方式(連接自動返回)。 –
我只能對此進行成像:在超時時調用Connection.abort(僅適用於1.7版本)並將其替換爲新連接 –
是的,我甚至可以通過Connection編寫自己的包裝。但主要問題是如何在超時時組織觸發中止功能。我的意思是說,它通過ScheduledExecutor運行單獨的線程是一個壞主意。我無法想象解決這個問題的另一種方法。 –
所以我需要在連接和包含Last_connection_usage_date的最後一次的字段的lead中編寫一些包裝。 如果(currendDate - last_connection_usage_date)> TIMEOUT比返回連接池。 但是在這種情況下,如果沒有人觸發連接的方法,連接永遠不會返回到池中。 例如,我們有包含10個連接的池。如果在TIMEOUT出現情況: 之後它們全部被佔用並且從未使用過,則我們有10次TIMEOUTED連接,但在池中爲零。 –
你是完全正確的,但在我看來,當客戶要求連接池時需要連接。所以,在你提到的情況下,當客戶端向池中請求連接時,客戶端將獲得連接。但是你說得對,TIMEOUT發佈的連接不是一個「同步」的過程。 –
您的意思是我應該在新客戶端從池中獲取連接時檢查連接TIMEOUT嗎?用你的話說,每次客戶端獲得連接時,我都應該迭代所有已發佈的連接並檢查TIMEOUT。但是我建議我的池是一個堆棧,它不保存對已發佈連接的引用。謝謝你的回覆) –