代码之家  ›  专栏  ›  技术社区  ›  uneq95

与hikaricp的并发性

  •  2
  • uneq95  · 技术社区  · 6 年前

    我有一个Java程序,它更新了Oracle数据库中的表。

    我尝试过使用单个JDBC连接,它非常慢,需要几个小时才能完成。

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

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

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

    如果没有,我如何让他们分开?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ori Marko    6 年前

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

    每个线程ask连接(如果可用)都会得到一个单独的db连接对象

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

    如果没有可用的连接,它将等待连接释放到池并接受它,如果它在定义超时之前无法获得连接,它将抛出超时异常

    如果没有,我如何让他们分开?

    不相关,因为每个线程将获得不同的连接

    关于 HikariCP and concurrency :

    HIKARICP包含一个名为ConcurrentBag的自定义无锁集合。这个想法是从C.NET ConcurrentBag类中借用的,但内部实现却截然不同。ConcurrentBag提供了…

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

    …导致高度并发性、极低延迟和最小化错误共享的发生。