首页 > 其他 > 详细

防止多次领取红包进行ID锁

时间:2016-12-30 10:49:45      阅读:238      评论:0      收藏:0      [点我收藏+]

//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;   

                }  

           }

}

防止多次领取红包进行ID锁

原文:http://www.cnblogs.com/cuijinlong/p/6235777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!