最近在做代码review,看到一段代码,起初没在意,但是再细看感觉有点怪怪的,最后看明白了。拿到组里和大家一起讨论,结果组里几个资深,专家第一印象也是蒙圈的。

贴出来和大家一起讨论下
Lock lock = new ReentrantLock(); @Transactional public void save(){ try { lock.lock(); //业务代码.... } finally { lock.unlock(); } }
可以发现问题吗?请闭眼思考下哈,答案我写在下面。
仔细看一下,这个锁是写在事务里的,事务的提交时间和解锁的时间点,大致上就明白了。
要真正弄弄清楚还得了解spring事务的原理,简单说下,spring注解事务是基于aop实现的,所以事务开启是在进入方法前开启,在方法结束后提交,而锁是在方法内部被提前释放的。所以在并发场景里还是有问题。
那如果嵌套方法加事务呢?[呲牙]


还没有评论,来说两句吧...