gpt4 book ai didi

java - Spring事务及其与synchronized关键字的交互

转载 作者:行者123 更新时间:2023-12-01 15:32:40 24 4
gpt4 key购买 nike

我有一个 DAO 类,它使用 Spring JDBC 访问 SQLite 数据库。我已经在 DAO 方法本身上声明了事务,因为我的服务层从不将查询合并到事务中。

由于我并行使用几个工作线程,但只有一个线程可以同时更新 SQLite DB,因此我使用 synchronized 来序列化对 DAO 的访问。

首先,我从服务类进行外部同步,例如:

synchronized (dao) {
dao.update(...);
}

然后,我想我不妨摆脱外部同步并将 synchronized 放在 DAO 方法本身上:

public synchronized void update(...) {
// Spring JDBC calls here
}

奇怪的是:我的查询现在花费的时间是以前的两倍!

为什么?

最佳答案

嗯,有一个区别是显而易见的:

synchronized (dao) {
// here you are synchronizing on the transactional proxy
}

public synchronized void update(...) {
// and here you are synchronizing on the target class, *inside* the proxy
}

其含义取决于您的其他代码,但这是明显的区别。

关于java - Spring事务及其与synchronized关键字的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9391701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com