zoukankan      html  css  js  c++  java
  • 防止多次领取红包进行ID锁

    //controller里面使用锁   

     ActivityRedPacket ap = customerService.getActivityRedPacket(params);
         if (synchronizedUtil.lockActivyId.containsKey(ap.getId())) {//MAP(key)锁里面是否存在锁
            logger.info("<----------------领取红包客户:" + customeid + "多次操作领取红包!---------------------->");
            return;
         } else {
            synchronizedUtil.synchronizedActivyId(ap.getId());/添加锁
         }

      synchronized (synchronizedUtil.lockActivyId.get(ap.getId())) {//获取锁

        try{

                //逻辑

        }finally{

          synchronizedUtil.lockActivyId.remove(ap.getId());//释放锁(移除MAP KEY 值)

        }

      }

    //synchronizedUtil工具类

    public class synchronizedUtil {

       public static final ConcurrentHashMap<Integer, Object> lockVehicle = new ConcurrentHashMap<Integer, Object>();  

       public static final ConcurrentHashMap<Integer, Object> lockOrder = new ConcurrentHashMap<Integer, Object>();    

           public static final ConcurrentHashMap<Integer, Object> lockCustomerId = new ConcurrentHashMap<Integer, Object>();    

           public static final ConcurrentHashMap<Integer, Object> lockActivyId = new ConcurrentHashMap<Integer, Object>();    

           public static synchronized void synchronizedVehicle(Integer vehicleId){  

                  if (!lockVehicle.containsKey(vehicleId)) {    

                         lockVehicle.put(vehicleId, new Object());       

                         return;   

                  }

            }  

            public static synchronized void synchronizedOrder(Integer OrderId){  

                   if (!lockOrder.containsKey(OrderId)) {    

                       lockOrder.put(OrderId, new Object());       

                       return;   

                    }  

             }    

             public static synchronized void synchronizedCustomerId(Integer CustomerId){   

                    if (!lockCustomerId.containsKey(CustomerId)) {    

                         lockCustomerId.put(CustomerId, new Object());       

                         return;   

                     }  

              }    

              public static synchronized void synchronizedActivyId(Integer ActivyId){   

                    if (!lockActivyId.containsKey(ActivyId)) {//是否包含此ID锁不包含则放到MAP里    

                             lockActivyId.put(ActivyId, new Object());      

                             return;   

                    }  

               }

    }

  • 相关阅读:
    CDH5.13 集成Kerberos配置
    使用bash脚本删除文件最后几行
    yolov3模型微调(fine-tune)备忘
    ubuntu 18.04 rsync 命令使用 服务端配置
    python 子包调用 跨目录调用
    [转]命令行界面 (CLI)、终端 (Terminal)、Shell、TTY的联系与区别
    bash shell 判断变量是否在列表中
    TensorFlow 图像分类模型 inception_resnet_v2 模型导出、冻结与使用
    numpy 数组集合运算及下标操作
    Win10 Service'MongoDB Server' failed to start. Verify that you have sufficient privileges to start system services【简记】
  • 原文地址:https://www.cnblogs.com/cuijinlong/p/6235777.html
Copyright © 2011-2022 走看看