我的工作是使用純JDBC
小CRUD
應用程序中的JDBC連接單,用Connection
基於枚舉的單,閱讀的Java Concurrency in Practice第一部分之後我就喜歡上了ThreadLocal
方法來編寫線程安全代碼,我的問題是:結束語在一個ThreadLocal
當環球JDBC
連接在ThreadLocal
考慮一個很好的做法?
我的工作是使用純JDBC
小CRUD
應用程序中的JDBC連接單,用Connection
基於枚舉的單,閱讀的Java Concurrency in Practice第一部分之後我就喜歡上了ThreadLocal
方法來編寫線程安全代碼,我的問題是:結束語在一個ThreadLocal
當環球JDBC
連接在ThreadLocal
考慮一個很好的做法?
將ThreadLocal中的全局JDBC連接包裝成一個良好的習慣?
取決於具體情況。如果有大量的線程,那麼它們中的每一個都將打開自己的連接,這可能是令人望而卻步的。然後,當線程處於休眠狀態時,你將會遇到停滯的連接。
使用可重入連接池會更好。然後,您可以重新使用已打開但尚未使用的連接,但將連接數限制爲最低需要同時工作。 Apache's DBCP就是一個很好的例子,並且深思熟慮。
他們的文件引用:
爲每個用戶創建一個新連接會耗費時間(通常需要的時鐘時間多秒),爲了執行可能採取毫秒數據庫事務。在同時用戶數量非常大的公共託管互聯網應用程序中,打開每個用戶的連接可能是不可行的。因此,開發人員通常希望在所有應用程序的當前用戶之間共享一個開放連接「池」。在任何給定時間實際執行請求的用戶數通常佔活動用戶總數的很小百分比,並且在請求處理期間是唯一需要數據庫連接的時間。