Java Hibernate-使多个线程同时运行

Java Hibernate-使多个线程同时运行,java,hibernate,Java,Hibernate,我试图通过从多个线程调用下面的方法来测试我的SpringMVC服务性能。该方法使用Hibernate获取记录,然后再次更新它。 但似乎所有线程都是顺序执行的,而不是并行执行的 我的服务方式 @Transactional public String performOperation() { USER user = dao.findUsr("name"); user.setMarks(50); } 我的测试应用程序 *Round 1* thread1.start() : For

我试图通过从多个线程调用下面的方法来测试我的SpringMVC服务性能。该方法使用Hibernate获取记录,然后再次更新它。 但似乎所有线程都是顺序执行的,而不是并行执行的

我的服务方式

@Transactional
public String performOperation() {
     USER user = dao.findUsr("name");
     user.setMarks(50);
}
我的测试应用程序

*Round 1*
thread1.start() : For Only T1, It takes time to execute : 5 Sec

*Round 2*
thread1.start()
thread2.start() : With T1 and T2: 10 Sec

*Round 3*
thread1.start()
thread2.start()
thread3.start() : With T1, T2, T3: 15 sec

*Round 4*
thread1.start()
thread2.start()
thread3.start()
thread4.start() : With T1, T2, T3, T4: 20 sec
我的配置

jdbc.initial.pool.size=10
jdbc.min.pool.size=10
jdbc.max.pool.size=120
不为以下设置设置任何内容:因此采用默认值

- current_session_context_class
- cache
观察:即使对于每个线程5000的循环,使用的最大DB池大小也是25。正如MySQL仪表板中所观察到的

问题
如果您看到它不是并行执行的。我想Hibernate正在锁定行。您可以提供任何指针来同时运行它。

要在完全相同的时间启动线程,我建议尝试一下

CyclicBarrier是“一种同步辅助工具,它允许一组线程都等待彼此到达一个公共屏障点”

在该文档中,有一个示例说明了它是如何工作和运行的。请在代码中引用它。例如:

final CyclicBarrier gate = new CyclicBarrier(5);

Thread thread1 = new Thread(){
public void run(){
    gate.await(); // Waits until all parties have invoked await on this barrier.
    //Your Code    
}};
Thread thread2 = new Thread(){
public void run(){
    gate.await();
    //Your Code    
}};
Thread thread3 = new Thread(){
public void run(){
    gate.await();
    //Your Code    
}};
Thread thread4 = new Thread(){
public void run(){
    gate.await();
    //Your Code    
}};

thread1.start();
thread2.start();
thread3.start();
thread4.start();
gate.await();

在您的示例中,您正在更新单行作为唯一的操作(您也在阅读它,但这几乎不值得一提,因为行被锁定)。这是无法并行实现的,这就是为什么在回复中使用额外的threadsThx无法获得任何性能。只是想添加一个要点,在我的方法中,findUsr(“名称”),名称总是不同的。因此,所有线程都在不同的行上工作。如果我启动4个线程,所有线程都有不同的名称,因此选择了不同的行。我可以看到行是以db为单位随机更新的,但是执行所需的总时间是按顺序增加的。使用mysql数据库,只为InfoAnywhere,对此有任何评论;我们需要Hibernate或MYSQL中的任何设置吗?您提供的示例并不完整,也没有描述问题。您的问题很可能是由无效配置引起的。虽然配置不可见,但无法通过上面的配置详细信息指出原因。请务必让我知道是否需要任何其他详细信息。Thx为thr回复fluffy。但问题在于服务器端,客户端只是压力测试的模拟器。需要知道为什么我的行被锁定,尽管选择了不同的行