我正在阅读使用简单CRUD
的小型JDBC
应用程序,并使用Connection
基于枚举的单例,在阅读Java Concurrency in Practice的第一部分后,我只是喜欢编写线程安全代码的ThreadLocal
方法,我的问题是:
在JDBC
中包含全局ThreadLocal
连接时,这被认为是一种好习惯吗?
答案 0 :(得分:3)
在ThreadLocal中包装全局JDBC连接时认为是一种好习惯吗?
取决于具体细节。如果存在大量线程,那么每个线程将打开它们自己的连接,这可能是禁止的。然后,当线程处于休眠状态时,您将会断开连接。
最好使用可重入的连接池。然后,您可以重用已打开但当前未使用的连接,但将连接数限制为您需要同时工作的最小连接数。 Apache's DBCP是一个很好的例子,并且经过深思熟虑。
引用他们的文档:
为每个用户创建新连接可能非常耗时(通常需要多秒的时钟时间),以便执行可能需要几毫秒的数据库事务。在公共托管的Internet应用程序中,每个用户打开一个连接可能是不可行的,因为同时用户的数量可能非常大。因此,开发人员通常希望在所有应用程序的当前用户之间共享打开连接的“池”。在任何给定时间实际执行请求的用户数通常占活动用户总数的很小百分比,并且在请求处理期间是唯一需要数据库连接的时间。