Deprecated: Constant PDO::MYSQL_ATTR_USE_BUFFERED_QUERY is deprecated since 8.5, use Pdo\Mysql::ATTR_USE_BUFFERED_QUERY instead in /www/wwwroot/www.1998123.xyz/var/Typecho/Db/Adapter/Pdo/Mysql.php on line 71
Spring中的synchronized - 98123_学习与记录

Spring中的synchronized容易出现不生效的情况,比如:在controller层加事物注解,内部代码块中含synchronized。

正确使用方式应当是:同步代码块在事物之前开启

为什么先调用@Transactional再调用synchronized会出现问题?

此处原文链接:https://blog.csdn.net/Rambo_Yang/article/details/119885524

1)事务开启在同步代码块之前
2)事务是 Spring 的 AOP 开启的,进入方法前,AOP 就开启了事务
3)事务开启以后才进入方法,再进入同步代码块加锁
4)当同步方法执行结束后,释放锁并提交事物(问题就出现在这里:如果在释放锁和提交事物之间有其它的线程请求,那么处理后的数据没有被提交,导致 synchronized 同步不生效的问题)

标签: none

仅有一条评论

  1. Typecho Typecho

    欢迎加入 Typecho 大家族

添加新评论