• 环境

window

springboot2.1.8

maven 3.5.7

jmeter5.2.1

  • 没有同步锁的情况下并发
    @GetMapping("/process/{orderId}")public Map<String, Object> process(@PathVariable("orderId") String orederId){log.info("[{}]开始",orederId);service();log.info("[{}]结束",orederId);return R.ok();}
  • 结果显而易见–完全并发

  • 初级同步锁情况
    @GetMapping("/process/{orderId}")public Map<String, Object> process(@PathVariable("orderId") String orederId){synchronized (this){log.info("[{}]开始",orederId);service();log.info("[{}]结束",orederId);}return R.ok();}
  • 看来达到了效果

  • 不过如果超过springboot的tomcat线程数(200)最大数会怎样呢?

**看起来也达到了效果 **

但是这样下来并不是我们期待的结果 ,他只是简单的实现程序上的锁并没有实现真正的 同步锁

  • 正确的做法是:
    @GetMapping("/process/{orderId}")public Map<String, Object> process(@PathVariable("orderId") String orederId){// 锁住这一个对象orederId.intern()synchronized (orederId.intern()){log.info("[{}]开始",orederId);service();log.info("[{}]结束",orederId);}return R.ok();}

  • 我们也可以来缓存一些锁
    Map<String,Object> mutexCache =  new ConcurrentHashMap<>();@GetMapping("/process/{orderId}")public Map<String, Object> process(@PathVariable("orderId") String orederId){mutexCache.computeIfAbsent(orederId,k -> new Object());synchronized (mutexCache){log.info("[{}]开始",orederId);service();log.info("[{}]结束",orederId);}return R.ok();}

支持10000并发同步锁


来自抖音@程序员小山与Bug

Spring boot同步锁相关推荐

  1. Spring Boot 乐观锁加锁失败 - 集成AOP

    Spring Boot with AOP 手头上的项目使用了Spring Boot, 在高并发的情况下,经常出现乐观锁加锁失败的情况(OptimisticLockingFailureException ...

  2. spring boot 分布式锁组件 spring-boot-klock-starter

    基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 sprin ...

  3. Spring Boot实现一个天气预报系统(二)数据同步

    1.开发环境 JDK8 Maven Spring Boot Web Starter 2.1.6 Apache HttpClient 4.5.3 Spring Boot Data Redis Start ...

  4. Spring Boot Redis 实现分布式锁,真香,你掌握了多少?

    org.springframework.boot spring-boot-starter-integration org.springframework.integration spring-inte ...

  5. spring boot redisLock redis分布式锁

    分布式锁: 分布式锁是控制分布式系统或者不同系统之间共同访问资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源,往往需要互斥来防止彼此干扰来保证一致性. 需解决问题: 1.任意时 ...

  6. Spring Boot基于KLock实现分布式锁的使用详解(一)

    目录 一.背景 二.maven依赖 三.配置 3.1.单节点配置 3.2.集群配置 四.源码及使用 4.1.源码-Klock(<font color=#FF0000>核心注解</fo ...

  7. Spring Boot Redis 实现分布式锁,真香!!

    之前看很多人手写分布式锁,其实 Spring Boot 现在已经做的足够好了,开箱即用,支持主流的 Redis.Zookeeper 中间件,另外还支持 JDBC. 本篇栈长以 Redis 为例(这也是 ...

  8. spring boot 2.0 redis 分布式锁

    基于spring boot 2.0 redis 分布式锁,对于redis的一些基本配置及jar不做相关介绍,博客只是针对分布式锁使用. java代码: @Autowired private Redis ...

  9. Spring Boot Redis 实现分布式锁,真香

    之前看很多人手写分布式锁,其实 Spring Boot 现在已经做的足够好了,开箱即用,支持主流的 Redis.Zookeeper 中间件,另外还支持 JDBC. 本篇栈长以 Redis 为例(这也是 ...

最新文章

  1. C语言函数集(十八)
  2. 川大计算机高考分数,2020年四川大学录取分数是多少 2020年高考多少分可以报考四川大学...
  3. 爬虫数据executemany插入_金融数据的获取——一个爬虫的简单例子
  4. php 的html文件怎么打开,什么是html文件?html格式如何打开?(图)
  5. oracle查看角色内容,oracle创建,查看用户和角色,用户角色赋权
  6. 2019 Power BI最Top50面试题,助你面试脱颖而出系列中
  7. 绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——4微分几何中的曲线
  8. 理解unittest(六)
  9. 【预测模型】基于蝙蝠算法优化最小二乘支持向量机lssvm实现数据预测matlab代码
  10. 计算机程序文献类别代码,论文参考文献类型代码参考
  11. 数据分析越来越火,如何做一个靠谱的职业规划?
  12. 药品质量管理软件市场现状及未来发展趋势
  13. 【情报分享1234】来自海莲花组织的道歉,然后再给你扔了个恶意文档
  14. Java深入(面试常见题)
  15. csapp 大作业 hello的自白
  16. 苏嵌实训——day7
  17. 【css滤镜】高级属性filter
  18. [Pytorch 常用函数] 激活函数Relu, Leaky Relu
  19. 梯度下降法实现线性回归, 实例---预测波士顿房价
  20. Chernoff Bound

热门文章

  1. 苹果 A10 处理器真的媲美桌面级CPU了么?
  2. Bug的严重程度(Blocker, Critical, Major, Minor/Trivial)和Bug修复优先级如何定义
  3. B站-王卓-数据结构课程-学习笔记
  4. java 获取区间随机数_Java获取随机数的几种方法
  5. java毕业设计旅游众筹平台mybatis+源码+调试部署+系统+数据库+lw
  6. 卷积向下取整 池化向上取整
  7. 到底是选择极米还是选择当贝?画质看当贝,音质看极米 在意画质和使用体验的选当贝
  8. 利用计算机网络实现OA的功能,计算机网络模拟试题.docx
  9. 品质qc工程图_QC工程图范本
  10. Vue3 源码流程图