微笑精灵 2022-04-28 11:19 采纳率: 93.8%
浏览 39
已结题

synchronized和查库哪个性能更差?

spring,springboot,java,mybatis,mysql,web和数据库在一台服务器,不考虑主从复制等其他影响。
就是一个很无语的问题吧。
现在有一个需求,要创建一条数据。
情况如下:
如果没有这条数据则创建,有则直接返回。id为自增,无其他限制。
为了防止用户误操作,我加了线程锁,里面有if是否存在。
但现在问题是,他俩谁更慢一点。
我要不要采用双if校验。if 锁 if
因为我不知道他俩谁更慢一点

  • 写回答

3条回答 默认 最新

  • Tomshidi 2022-04-28 15:19
    关注

    首先,查库是无法避免重复插入的情况的,因为极大可能多个线程同时查询数据库没有记录,然后就都可以插入数据。
    保险的办法是,使用用双重校验锁模式

    查库
    if(库里不存在){
        syn(){
            查库
            if(库里不存在){
                存库
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 4月28日

悬赏问题

  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程