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