请看如下代码
private static Integer threadNum = 10;
CountDownLatch countDownLatch = new CountDownLatch(threadNum);
ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
for (Integer threadIndex = 1; threadIndex <= threadNum; threadIndex++) {
Integer finalThreadIndex = threadIndex;
executorService.submit(new Runnable() {
@Override
public void run() {
/// doSomeThing....
while(condition){
/// jdbc操作
}
// 计时器++
countDownLatch.countDown();
}
});
}
明明设置的是10个线程,为什么启动之后,只有2个线程在运行,但是每个线程都执行了run方法,但都卡在jdbc操作前,仅有2个线程在执行,并且2个线程执行完成后,其他线程进入卡死的状态,如何解决?
这种情况,不考虑死锁的情况下 ,只需要改下数据库连接池的大小就解决了,之前默认设置的是2个,导致连接数据库并且不去释放,就只有切仅有2个线程去执行
spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.maximum-pool-size=20