Java 在ThreadLocal中包装JDBC连接单例
我正在开发一个小型的Java 在ThreadLocal中包装JDBC连接单例,java,jdbc,concurrency,Java,Jdbc,Concurrency,我正在开发一个小型的CRUD应用程序,它使用普通的JDBC,具有连接基于枚举的单例,在阅读了本文的第一部分后,我喜欢用ThreadLocal方法编写线程安全代码,我的问题是: 将全局JDBC连接包装在ThreadLocal中被认为是一种好的做法吗 在ThreadLocal中包装全局JDBC连接被认为是一种好的做法吗 这在很大程度上取决于细节。如果有大量线程,那么每个线程都将打开它们自己的连接,这可能是禁止的。然后,当线程处于休眠状态时,您将拥有停滞的连接 最好使用可重入的连接池。然后,您可以重用
CRUD
应用程序,它使用普通的JDBC
,具有连接
基于枚举的单例,在阅读了本文的第一部分后,我喜欢用ThreadLocal
方法编写线程安全代码,我的问题是:
将全局JDBC
连接包装在ThreadLocal
中被认为是一种好的做法吗
在ThreadLocal中包装全局JDBC连接被认为是一种好的做法吗
这在很大程度上取决于细节。如果有大量线程,那么每个线程都将打开它们自己的连接,这可能是禁止的。然后,当线程处于休眠状态时,您将拥有停滞的连接
最好使用可重入的连接池。然后,您可以重用已打开但当前未使用的连接,但将连接数限制在并发工作所需的最小值。这是一个很好的例子,受到了广泛的关注
引用他们的文档:
为了执行可能需要毫秒的数据库事务,为每个用户创建新连接可能非常耗时(通常需要几秒钟的时钟时间)。在公共托管的Internet应用程序中,每个用户打开一个连接是不可行的,因为在该应用程序中,同时出现的用户数量可能非常多。因此,开发人员通常希望在应用程序的所有当前用户之间共享一个开放连接的“池”。在任何给定时间实际执行请求的用户数通常只占活动用户总数的很小百分比,并且在请求处理过程中是唯一需要数据库连接的时间