【发布时间】:2018-11-20 07:34:56
【问题描述】:
我有一个更新 oracle 数据库中的表的 java 程序。
我已经尝试过使用单个 JDBC 连接,但速度非常慢,需要数小时才能完成。
我正在尝试使用 HikariCP 创建一个连接池,并让多个线程从池中获取单独的连接。
假设池中有 6 个线程和 5 个数据库连接,其中 5 个线程调用 HikariDataSource.getConnection() 方法。他们每个人都会得到一个单独的数据库连接对象吗?
如果是,那么当线程调用 getConnection 方法或使用空连接执行剩余代码时,线程是否会处于阻塞/等待状态?
如果不是,我如何让它们分开连接?
【问题讨论】:
-
为什么不直接测试一下?
-
一般来说,对于连接池,您希望每个工作单元而不是每个线程获得连接。数据库上的一个工作单元通常是一个事务。这可能看起来很浪费,不断地获取和返回连接 - 但正是这一点使池变得有价值;你的连接数可能比工人少很多。
-
@JBNizet 我按照您的建议进行了测试,结果与回答的结果相同。
标签: java multithreading jdbc concurrency hikaricp