高并发编程陷阱之check and set

今天公司CTO跟隔壁部门开技术会,旁听了一下。所讲的内容感觉好高大上啊!简单记录一下

场景是这样的:

    if(check(id)===true)
    {
       
     }else{
        set(id);
     }

什么意思呢? 就是首先去查数据库这个id存不存在,不存在的话就去设置一下。

当时CTO就指着这段代码问你们看有没有什么问题?

虽然我java不怎么懂,但从逻辑上没啥问题啊,这么简单的逻辑怎么有问题呢?!!

然后CTO 说:如果用户在做相关请求的时候用户因为什么原因刷新了一下页面,就造成了俩个一样的请求,俩个请求一前一后进入上面那个if else 语句就会出现问题。
这是单机的情况,如果是多机(开了多个做负载均衡),那么更容易出错。

解决方法是在数据库加锁。

简直是大开眼界啊,之前写代码根本不会想到这样的问题,CTO@闪银奇异,果然牛逼!

原文地址:https://www.cnblogs.com/yyrdl/p/4799049.html