-2
我需要在Java中創建一個自定義連接池,以便如果用戶請求連接並在使用後返回到池但他可以通過將連接分配給某個變量來維護對連接的引用。java中的連接池
既然他已經返回連接池,我可以給任何其他用戶。現在兩個用戶將擁有相同的連接對象,這是錯誤的。
如何通過避免這種情況創建連接池?
這個問題在面試中被問到。我知道有很多庫可以提供這些功能,但是他們的內部工作是如何實現的。
我需要在Java中創建一個自定義連接池,以便如果用戶請求連接並在使用後返回到池但他可以通過將連接分配給某個變量來維護對連接的引用。java中的連接池
既然他已經返回連接池,我可以給任何其他用戶。現在兩個用戶將擁有相同的連接對象,這是錯誤的。
如何通過避免這種情況創建連接池?
這個問題在面試中被問到。我知道有很多庫可以提供這些功能,但是他們的內部工作是如何實現的。
看起來您正在描述UCP(通用連接池)的一個稱爲連接標籤的功能。你可能想看看doc。
請修改該問題,將其限制爲具有足夠詳細信息的特定問題以確定合適的答案。整本書和教程都是關於這些話題的。人們花了很多時間來實現它。機會接近0,這樣的話題適合於一個SO問題/答案。 – GhostCat
有這樣的要求也很奇怪。如果用戶返回連接池(通常通過調用'close()'),他不應該再使用它 - 這將是客戶端代碼中的一個錯誤。通過使用帶有內部'closed'標誌的連接包裝,在調用'close()'後阻止任何調用,可以很容易地避免這種情況。但這是許多實現的標準東西,不需要重新發明輪子。 –
解決方案是將PhantomReference用於客戶端代理(這是對'finalizer'的更有效的替代方案)。收集代理時,通知池會允許它回收連接並將其提供給其他人。請參閱此文章(http://www.kdgregory.com/index.php?page=java.refobj)以獲取詳細解釋。 –