it_ape2233 2019-10-23 10:08 采纳率: 36.4%
浏览 618
已采纳

[并发]判断条件同时插入数据

业务逻辑:
两个老师在同一或交叉时间段内在同一教室开课,只能有一个老师开课成功,
虽然在插入开课数据前,做了代码层面的判断,但通过压测,仍不能有效避免并发开课成功的结果,请问各位有没有一种有效的解决方案?

 //判断教室是否占用
                if (class_update_status == 1) {
                    boolean canUse = classroomCanUse(class_id, startInputDate, endInputDate);
                    //教室不可用
                    if (!canUse) {
                        return ResultBean.setOk(1, "添加课时失败,该时间段此教室已被占用,请预约其他教室");
                    }
                }
                int i = lessonPeriodMapper.insertPeriod(period);
                //添加直播课时成功
                if (i > 0) {
                    int new_period_id = period.getPeriod_id();
                    int seconds=(int)((endTime- System.currentTimeMillis())/1000);
                    redisUtils.setex(new_period_id + "_ossurl",seconds,oss_path);
                    map.put("period_id", new_period_id);
                    updateProgressPriodNumber(lesson_id);
                    return ResultBean.setOk(0, "添加直播课时成功", map);
                }

图片说明

开启100个并发线程

当执行延迟为1s时候并不会出现并发插入多条成功的情况,延迟为0s时候最多出现并发插入成功5条,实际场景虽然出现延迟0s的几率很少,但仍不能根本解决问题.

  • 写回答

2条回答 默认 最新

  • Kevin.Y.K 2019-10-23 12:00
    关注

    就是加锁机制,你这个系统给学校老师使用的,并发量不会太大,使用synchronized就可以解决了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器