对DB的调用是否在方法中生成新线程

时间:2018-06-14 18:26:21

标签: java spring multithreading hibernate

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

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

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

在产品类中,当控制(线程)到达第3行时,产生的新线程和第4行同时执行并保存在第3行。或者线程首先执行第3行,当它完全执行第3行时去第4行?

1 个答案:

答案 0 :(得分:0)

仅返回第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();
    }
}