//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锁的更多相关文章

  1. MySQL->>innodb_autoinc_lock_mode参数控制auto_increment 插入数据时相关锁的模式

    转自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2141640/ ---------------------------------- ...

  2. db事务级别及锁

    相关sql 事务A BEGIN TRANSACTION --执行修改 获取排他锁 UPDATE Product SET Price = 10 WHERE Id = 1 --阶段2 UPDATE Pro ...

  3. MySQL自增锁模式innodb_autoinc_lock_mode参数理解调优

    前段时间某数据表运行过程中,出现自增字段突然跳跃式增长的问题,潜心研究发现,问题导致原因可能是因为并发写入导致 于是通过各种途径查阅是因为innodb_autoinc_lock_mode参数设置的不同 ...

  4. SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

  5. 分布式锁实现(一):Redis

    前言 单机环境下我们可以通过JAVA的Synchronized和Lock来实现进程内部的锁,但是随着分布式应用和集群环境的出现,系统资源的竞争从单进程多线程的竞争变成了多进程的竞争,这时候就需要分布式 ...

  6. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  7. iPhone 丢失

    http://www.appvv.com/zhuanti/iccid/ 第一步:iPhone丢失后,及时报警,在最短时间内补办SIM卡或把卡停掉. 第二步:输入查询网址:sn.appvv.com 输入 ...

  8. mysql 案例 ~ 常见案例汇总

    一 简介:这里汇总了一些mysql常见的问题二 案例场景   问题1 mysql设置了默认慢日志记录1S,为何会记录不超过1S的sql语句   答案 mysql~log_queries_not_usi ...

  9. 买二手iphone的建议

    手机到手后一定要在第一时间把“按键开关.指纹解锁.指南针.照相机.话筒.听筒.手电筒.定位.WiFi”都测一遍. 环境有无wifi:imei:×××××序列号:××××× 外观和零件:1外观,1是否粗 ...

随机推荐

  1. ubuntu-利用pdnsd-TCP方式获取IP-拒绝DNS污染

    那,自从国内技术出现了DNS污染问题呢,时常导致很多国外网站访问不正常,所以通过参考一些博客所属避免DNS污染的方法,决定搭建一个Ubuntu JeOS下的DNS缓存服务器,该服务器利用TCP方式获取 ...

  2. Do things for others

    早上,按照平常的时间去吃早饭,食堂格外的空旷,打饭的员工说今天人很少,我说昨天是有元旦晚会,她说今天是放假,我后来想,还是她说的更有道理.她看的比我清楚更清楚! 幸亏昨晚上记录下了早上要帮别人搜论文的 ...

  3. nginx相关的一些记录

    http redirect to https: if ($http_cf_visitor ~ '"scheme":"http"'){ rewrite ^/(.* ...

  4. 冲刺一 (Day 2)

    冲刺一 (Day 2) 小组讨论结果 经过今天的小组会议,小组各成员决定先进一步探讨项目的需求.因为我们明白要砍倒一棵树,磨刀才是前期的重中重之重,实际中也有不少以为前期需求没做好而,在项目后期推翻重 ...

  5. UE4.11新特性:胶囊体阴影

    官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...

  6. Windows转到linux中,文件乱码,文件编码转换 & 解决sqlplus连接oracle乱码

    转载:http://www.cnblogs.com/wanyao/p/3399269.html 最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序 ...

  7. Linux 之HTTP服务,APACHE

    1.基础知识 HTTP:超文本传输协议,超链接URI:Uniform Resource Identifier,全局范围内唯一命名符MIME:Multipurpose Internet Mail Ext ...

  8. C# ADO.NET (sql语句连接方式)(查询)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. mysql存储过程详细教程

    记录mysql存储过程中的关键语法:DELIMITER //  声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int)  声明存储过程 ...

  10. python学习心得第三章

    python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...