一个面试并发的问题

Pack 发布于 2020-02-08 18:09
阅读 259
收藏 0
分类:面试与就业

有这样一个场景:在service的方法上加上 @Transaction 后,
再在方法里面的逻辑用Synchronized关键字修饰,在高并发下会出现什么情况?

285
Pack
Pack

这个题有两个知识点,Transaction的作用及原理,Synchronized关键的原理。首先说会出现的情况,有几种情况,1是该方法执行效率会降低,会膨胀为重量级锁。2.是会影响事务。

看过Tom老师的Spring源码分析的话,应该知道事务这块的东西实际上也是动态代理实现的,会在方法执行前后,开启事务,和提交事务。假设现在有两个线程,一个线程刚刚执行完数据库的操作,结果第二个方法进来,由于题中说了是在方法逻辑里面用了Synchronized,所以该方法本身还是能进,如果在Synchronized修改的代码块之前还有其他数据库操作的话,此时第二个线程能读到第一个线程修改前的数据,当然如果是查询则没什么影响(查询的不是Synchronized修饰的增删改操作的表)。

以上分析是建立在隔离级别RR的的前提下。

请先 登录 后评论