java - 对数据库的调用是否会在方法中产生新线程
问题描述
在下面的产品类中,我有一个方法调用 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 ?
解决方案
只有返回第 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();
}
}
推荐阅读
- javascript - 无法从 json 查询中获取字段
- powershell - wget、curl 和 powershell 在浏览器工作时下载文件的问题
- sockets - Linux内核在哪里为客户端分配TCP/UDP的可用端口
- azure - Azure 函数 - 将消息从 TimerTrigger 广播到 Azure SignalR 服务
- java - 如何知道 HAProxy 是否从 java 代码中关闭?
- python - 在 matplotlib 中将日期时间序列绘制为分类数据
- .htaccess - 使用 htaccess 将子域重定向到 url 并将子域内容重定向到 root
- javascript - 防止用户在刷新并停留在同一页面时被重定向到主页 React JS
- python - 将python数组存储在列的每个条目中
- php - 将 woocommerce 产品变体显示为商店页面上的单个产品和 ajax 加载更多