首页 > 解决方案 > 对数据库的调用是否会在方法中产生新线程

问题描述

在下面的产品类中,我有一个方法调用 addDetails

 class Product{
    addDetails(){
       productDAO.save(productDetails) //Line 3
       addAdditionalDetails(productDetails) //Line 4
    }
   }

    class ProductDAO {
       @Transactional
       public void save(Product productDetails){
           entitiyManager.merge(productDetails)
       }
    }

在产品类中,当 control(thread) 到达第 3 行时,会产生一个新线程,第 4 行与第 3 行的保存同时执行。或者线程首先执行第 3 行,当它完全执行第 3 行时,它转到第 3 行4 ?

标签: javaspringmultithreadinghibernate

解决方案


只有返回第 3 行时,才会执行第 4 行。

实际上,您不会ProductDAO.save()在新线程中执行。此外EntitiyManager.merge也不会在自己的线程中执行。
因此,对的调用ProductDAO.save()将仅在 返回时entitiyManager.merge(productDetails)返回。

如果您编写如下代码,情况会有所不同,第 3 行和第 4 行的顺序将无法预测:

class ProductDAO {
    @Transactional
     public void save(Product productDetails){
       new Thread( ()-> entitiyManager.merge(productDetails)).start();
    }
}

推荐阅读