【发布时间】:2019-07-30 20:32:44
【问题描述】:
我将 ORMLite (Java) 与 HikariCP 一起使用,并且我有很多异步调用的代码,即 CompletableFuture.supplyAsync(Supplier)。在供应商内部,我在这些任务中对不同的 ORMLite Dao 对象进行了各种调用。我遇到了一个死锁场景,发现增加连接池的大小似乎已经解决了这个问题。
经过一番研究,我发现这是一个有据可查的问题。查看了here提供的信息:
“每个线程都在等待第二个数据库连接,由于所有线程都被阻塞,因此没有一个可用。”
这引起了我的注意。看ORMLite源码的时候发现,每调用一个Dao方法,都会获取一个连接。就我而言,我在通过CompletableFuture 创建的每个异步任务中调用多个 Dao 方法,这让我想到了我的问题。
我的理解是我应该只在每个线程中获取一个连接,那么有没有办法用 ORMLite 做到这一点?记住我调用了不同的 Dao 对象并做了一些进一步的研究,Dao#callBatchTasks(Callable) 引起了我的注意,但我不确定我是否可以调用 Callable 中的不同 Dao 对象。还是我的逻辑有缺陷,或者我的文章中缺少一些基本的东西?
【问题讨论】:
-
赞成告诉存在像 OrmLite 这样的东西。
标签: java multithreading ormlite