開發者學堂課程【Java 面試疑難點串講 2:Java 資料庫開發:資料庫連接配接池實作原理
】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/25/detail/542資料庫連接配接池實作原理
如果想實作一個連接配接池,本質的思想就是實作一個 Connection 的對象數組,但是這個對象數組并不是無限開辟的,是有上限存在的,是以最初的資料庫手工連接配接池的實作可以采用 Map 集合完成。
也就是說在進行處理的時候 Map 集合裡面儲存有全部連接配接池的可用連接配接(最小維持數、最大可打開數、最大等待時間)
實作思路:
1. 所有的連接配接對象被 Map 集合所管理,但是這個 Map 集合受到最大連接配接數的控制,也就是說如果現在需要擷取資料庫連接配接,但是發現已經沒有可用的連接配接了,則這個時候應該開辟新的連接配接,但是同時需要保證連接配接池中是有上限的;
2. 在擷取連接配接的時候如果發現連接配接已經滿了,則這個時候應該追加有一個等待喚醒的控制,也就是說對于連接配接池的控制,如果發現沒有連接配接,則等待新的連接配接到來,就可以采用線程的等待與喚醒機制來完成;
3. 連接配接池中的連接配接使用完成之後一定要關閉,但是這個的關閉并不是徹底的關閉資料庫的連接配接,而是說将這個連接配接的可用性重新放回到連接配接池之中,也就是說為連接配接池裡面設定一個标記(标記為 true,那麼就表示該連接配接可用,如果沒有 true 的連接配接了,那麼就表示連接配接池滿了,而當把連接配接放回去之後将這個标記設定為 false,就表示有空餘連接配接了);
4. 如果現在要去考慮連接配接池的實作,最好的做法是使用 ConcurrentHashMap 子類來性,這個類考慮到了并發性,并且也可以有很好的同步處理效果。