当synchronized和Transactional一起用的时候出现线程安全问题

217 阅读1分钟
  • synchronized 锁的是这个方法,
  • Transactional 的事务是Spring的AOP开启的。进入这个方法前,AOP会先开启事物,然后进入方法,此时会加锁,
  • 当方法结束后,锁释放,然后才会提交事物。如果在释放锁和提交事物之间有其他线程请求,然后该线程继续加锁。
  • 这种情况会导致程序不安全。所以应该在开启事物前加锁。
public synchronized void synchronizedShareEstate(String shareAssistGuide) {
        shareService.shareEstate(shareAssistGuid); 
}
@Transactional
public void shareEstate(String shareAssistGuid) {
    
}