与 HikariCP 的并发

une*_*q95 4 java concurrency multithreading jdbc hikaricp

我有一个java程序,它更新oracle数据库中的表。

我已经尝试使用单个 JDBC 连接,但速度非常慢,需要几个小时才能完成。

我正在尝试使用 HikariCP 来创建连接池,并让多个线程从池中获取单独的连接。

假设池中有 6 个线程和 5 个数据库连接,其中 5 个线程调用该HikariDataSource.getConnection()方法。他们每个人都会得到一个单独的数据库连接对象吗?

如果是,那么当线程调用 getConnection 方法或使用空连接执行剩余代码时,该线程是否会处于阻塞/等待状态?

如果不是,我如何让它们分开连接?

use*_*900 5

他们每个人都会得到一个单独的数据库连接对象吗?

每个线程询问连接,如果可用,则获取一个单独的数据库连接对象

如果是,那么当线程调用 getConnection 方法或使用空连接执行剩余代码时,该线程是否会处于阻塞/等待状态?

如果没有可用的连接,它将等待连接被释放到池中并获取它,如果直到定义超时才获得连接,它将抛出超时异常

如果不是,我如何让它们分开连接?

无关紧要,因为每个线程都会获得不同的连接

关于HikariCP 和并发:

HikariCP 包含一个称为 ConcurrentBag 的自定义无锁集合。这个想法是从 C# .NET ConcurrentBag 类借用的,但内部实现完全不同。ConcurrentBag 提供...

  • 无锁设计
  • 线程本地缓存
  • 队列窃取
  • 直接切换优化

...从而实现高度并发、极低延迟并最大程度地减少错误共享的发生。

  • @uneq95,使用完毕后必须关闭连接,Hikari 不会为您执行此操作,请参阅/sf/ask/155765501/ (2认同)
  • @uneq95 关闭连接后,连接将返回连接池 (2认同)