Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对DB的调用是否会在方法中产生新线程_Java_Spring_Multithreading_Hibernate - Fatal编程技术网

Java 对DB的调用是否会在方法中产生新线程

Java 对DB的调用是否会在方法中产生新线程,java,spring,multithreading,hibernate,Java,Spring,Multithreading,Hibernate,在下面的Product类中,我有一个addDetails方法调用 class Product{ addDetails(){ productDAO.save(productDetails) //Line 3 addAdditionalDetails(productDetails) //Line 4 } } class ProductDAO { @Transactional public void save(P

在下面的Product类中,我有一个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行时,会生成一个新线程,并在第3行上与save同时执行第4行。或者线程首先执行第3行,当它完全执行第3行时,它转到第4行?

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