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

}

}

}

最新文章

  1. git学习笔记10-新开发的功能不想要了-强行删除分支
  2. Linux-Unix版本介绍
  3. phpcms v9中调用多栏目的方法--get标签(备实例)
  4. PHP中foreach循环详解
  5. Coursera获取中文字幕(如果有的话)
  6. juce 中的WeakReference分析
  7. ExtJS学习第一天 MessageBox
  8. HDU 3037 Saving Beans (Lucas法则)
  9. maven项目转成web项目
  10. echo print print_r的区别
  11. 201521123008《Java程序设计》第10周学习总结
  12. this的理解
  13. BZOJ4036 按位或
  14. vue-cli +echarts-amap集成echarts和高德地图TypeError: Cannot read property &#39;dataToPoint&#39; of null解决方案
  15. 【JVM.2】垃圾收集器与内存分配策略
  16. Java NIO 与 IO之间的区别
  17. MVC ---- 去掉HTML过滤
  18. HttpPost
  19. maven 介绍(zz )
  20. 1. Python3 环境搭建

热门文章

  1. EF文章连接
  2. java socket 通讯
  3. Maven(二)使用eclipse创建maven多模块项目
  4. Node Server管理
  5. sublime如何关闭响应慢的插件的提示
  6. 完全卸载Oracle11G
  7. 《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖
  8. 浅谈 JS 创建对象的 8 种模式
  9. EBS中后台AP发票审批脚本
  10. AES加密补位填充的一个问题