多线程什么都没等?

时间:2014-06-12 17:07:35

标签: java multithreading spring hibernate spring-batch

TLDR:在多线程海量数据库插入过程中,多个线程都在等待没有明显的原因。

我们需要在数据库中创建多个行。为了加快插入速度,我们使用多线程,以便可以生成多个对象并将其并行插入。我们正在使用Hibernate,Spring批处理和Spring调度(ThreadPoolTask​​Executor,Partitioner,ItemProcessor)。我们从this example开始。

我们查看了JVisualVM的线程状态,并注意到一次不会有超过8个活动线程,无论运行程序的硬件是什么。我们尝试了#34;标准桌面"计算机(双核),还有两个AIX:一个有8个活动CPU,一个有60个活动CPU。

enter image description here

我们知道为什么我们一次只能拥有8个以上的工作线程?

我们已检查的事项清单:

  • 所有线程都有工作要做(配置Partitioner和ThreadPoolTask​​Executor,以便每个线程都有相同数量的数据要插入数据库)。
  • 我们尝试了各种commit-interval:1,P其中P是分区的大小,N其中N是所有P的总和(它不应该是问题的原因,但是提交数据似乎很长数据生成很快的部分工作。
  • 8不是我们使用的任何对象参数的默认值。

0 个答案:

没有答案