加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Synchronized锁在Spring事务管理下,为啥还线程不安全?

发布时间:2019-03-24 15:36:43 所属栏目:优化 来源:Java3y
导读:副标题#e# 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 朋友问了我一个技术的问题(朋友实在是好学,佩服!) 该问题来源知乎(synchronized锁问题): https://www.zhihu.com/question/277812143 开

我们知道Spring事务的底层是Spring AOP,而Spring AOP的底层是动态代理技术。跟大家一起回顾一下动态代理:

  1. public static void main(String[] args) { 
  2.  
  3.         // 目标对象 
  4.         Object target ; 
  5.  
  6.         Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), Main.class, new InvocationHandler() { 
  7.             @Override 
  8.             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  9.  
  10.                 // 但凡带有@Transcational注解的方法都会被拦截 
  11.  
  12.                 // 1... 开启事务 
  13.  
  14.                 method.invoke(target); 
  15.  
  16.                 // 2... 提交事务 
  17.  
  18.                 return null; 
  19.             } 
  20.              
  21.         }); 
  22.     } 

(详细请参考我之前写过的动态代理:给女朋友讲解什么是代理模式)

实际上Spring做的处理跟以上的思路是一样的,我们可以看一下TransactionAspectSupport类中invokeWithinTransaction():

调用方法前开启事务,调用方法后提交事务

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读