在下面的产品类中,我有一个方法调用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行?
答案 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();
}
}