当前位置: 首页 > news >正文

织梦栏目页不显示网站描述免费搭建永久网站步骤

织梦栏目页不显示网站描述,免费搭建永久网站步骤,爱奇艺网站建设费,网站后台管理系统很慢记一次并发问题 Synchronized 失效 场景#xff1a;为避免信息提交重复#xff0c;给事务方法增加了synchronized修饰符#xff0c;实际场景中仍然无法完全避免重复#xff0c;原因是因为在第一个线程执行完synchronized代码段后#xff0c;此时spring还未完成事务提交为避免信息提交重复给事务方法增加了synchronized修饰符实际场景中仍然无法完全避免重复原因是因为在第一个线程执行完synchronized代码段后此时spring还未完成事务提交但是其他线程已经进入该代码段导致信息提交重复。 这里是部分spring aop 实现声明式事务的代码 PlatformTransactionManager ptm asPlatformTransactionManager(tm);final String joinpointIdentification methodIdentification(method, targetClass, txAttr);if (txAttr null || !(ptm instanceof CallbackPreferringPlatformTransactionManager)) {// Standard transaction demarcation with getTransaction and commit/rollback calls.TransactionInfo txInfo createTransactionIfNecessary(ptm, txAttr, joinpointIdentification);Object retVal;try {// This is an around advice: Invoke the next interceptor in the chain.// This will normally result in a target object being invoked.retVal invocation.proceedWithInvocation();// 这里执行完成我们被代理的方法以后资源就已经被释放掉了// 导致后面的线程可以获得这个锁资源可以执行方法中的临界区代码}catch (Throwable ex) {// target invocation exceptioncompleteTransactionAfterThrowing(txInfo, ex);throw ex;}finally {cleanupTransactionInfo(txInfo);}if (retVal ! null vavrPresent VavrDelegate.isVavrTry(retVal)) {// Set rollback-only in case of Vavr failure matching our rollback rules...TransactionStatus status txInfo.getTransactionStatus();if (status ! null txAttr ! null) {retVal VavrDelegate.evaluateTryFailure(retVal, txAttr, status);}}// 提交事务也就是说这里的事务还没有提交但是后面过来的线程已经在查询数据库了// 所以查询到的数据还是falsecommitTransactionAfterReturning(txInfo);return retVal;}在多线程环境下就可能会出现方法执行完了(synchronized代码块执行完了)事务还没提交别的线程可以进入被synchronized修饰的方法再读取的时候读到的是还没提交事务的数据这个数据不是最新的所以就出现了这个问题。 方案1 很简单 那就是不开事务就行了再这个方法上不加事务就行 因为 Synchronized 可以保证线程安全。 这个方案的意思就是说不要再同一个方法上用Transaction 和 Synchronized 例子图就没有贴了 就像我前面的 把注解去掉就好了 但是前提你这个方案确定是不需要事务 方案2 再这个里面再调用一层service 让那个方法提交事务这样的话加上Synchronized 也能保证线程安全。或者直接在controller层加上锁就可以保证整个方法的原子性了 Synchronized 失效关键原因是因为Synchronized锁定的是当前调用方法对象,而Spring AOP 处理事务会进行生成一个代理对象并在代理对象执行方法前的事务开启方法执行完的事务提交所以说事务的开启和提交并不是在 Synchronized 锁定的范围内。出现同步锁失效的原因是:当A(线程) 执行完insertSelective()方法会进行释放同步锁去做提交事务但在A(线程)还没有提交完事务之前B(线程)进行执行findOrder() 方法执行完毕之后和A(线程)一起提交事务, 这时候就会出现线程。
http://www.w-s-a.com/news/112576/

相关文章:

  • iis7 网站404错误信息12306网站很难做吗
  • 网站建设600元包公司设计图片大全
  • 网站建设费用怎么做分录做校园网站代码
  • 网站改版做重定向福州网站建设思企
  • 网站建设全流程企业形象网站开发业务范畴
  • wordpress无法查看站点西安优秀高端网站建设服务商
  • 固始网站制作熟悉免费的网络营销方式
  • 做网站到a5卖站赚钱搜索引擎优化代理
  • 沈阳网站建设包括win10优化
  • 做百度手机网站点击软网站seo优化徐州百度网络
  • 徐州专业网站制作标志设计作业
  • 自己可以做网站空间吗海天建设集团有限公司网站
  • 教学督导网站建设报告aspcms网站图片不显示
  • 网站开发公司成本是什么门户网站宣传方案
  • 上海 企业网站建设网站怎么开通微信支付
  • 饮料网站建设wordpress主题猫
  • 网站建设需要编码不有没有专门的网站做品牌授权的
  • 做爰在线网站免费空间列表
  • 网站外链建设工作总结郑州网站建设扌汉狮网络
  • 建设企业网站的需要多长时间网站使用说明书模板
  • 建网站首页图片哪里找263企业邮箱网页版登录
  • 盐城网站建设电话高端定制网站
  • 成都网站seo技术施工企业样板先行制度
  • 高端网站建设电话河北建筑工程信息网站
  • 亲 怎么给一个网站做备份财务系统有哪些软件
  • wordpress重新手机优化专家下载
  • 怎样把网站做成软件设计工作室怎么接单
  • html网站设计实例代码重庆多个区划定风险区
  • 推广方案设计同一个网站可以同时做竞价和优化
  • 论坛网站开发 go电商扶贫网站建设