防止多次领取红包进行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;
}
}
}
防止多次领取红包进行ID锁的更多相关文章
- MySQL->>innodb_autoinc_lock_mode参数控制auto_increment 插入数据时相关锁的模式
转自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2141640/ ---------------------------------- ...
- db事务级别及锁
相关sql 事务A BEGIN TRANSACTION --执行修改 获取排他锁 UPDATE Product SET Price = 10 WHERE Id = 1 --阶段2 UPDATE Pro ...
- MySQL自增锁模式innodb_autoinc_lock_mode参数理解调优
前段时间某数据表运行过程中,出现自增字段突然跳跃式增长的问题,潜心研究发现,问题导致原因可能是因为并发写入导致 于是通过各种途径查阅是因为innodb_autoinc_lock_mode参数设置的不同 ...
- SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
- 分布式锁实现(一):Redis
前言 单机环境下我们可以通过JAVA的Synchronized和Lock来实现进程内部的锁,但是随着分布式应用和集群环境的出现,系统资源的竞争从单进程多线程的竞争变成了多进程的竞争,这时候就需要分布式 ...
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- iPhone 丢失
http://www.appvv.com/zhuanti/iccid/ 第一步:iPhone丢失后,及时报警,在最短时间内补办SIM卡或把卡停掉. 第二步:输入查询网址:sn.appvv.com 输入 ...
- mysql 案例 ~ 常见案例汇总
一 简介:这里汇总了一些mysql常见的问题二 案例场景 问题1 mysql设置了默认慢日志记录1S,为何会记录不超过1S的sql语句 答案 mysql~log_queries_not_usi ...
- 买二手iphone的建议
手机到手后一定要在第一时间把“按键开关.指纹解锁.指南针.照相机.话筒.听筒.手电筒.定位.WiFi”都测一遍. 环境有无wifi:imei:×××××序列号:××××× 外观和零件:1外观,1是否粗 ...
随机推荐
- poj1113
http://poj.org/problem?id=1113 完全时copy大神给的模版哦,结果再加一个小圆的周长就好啦 #include<stdio.h> #include<mat ...
- KMS服务器激活Windows和Office2013EnterprisePlus
KMS服务器激活Windows和Office2013EnterprisePlus 参考了文档 http://wenku.baidu.com/view/0cb2602358fb770bf68a5501. ...
- AX7: How to deploy a Package
A. Using LCS services. B. Manual using command prompt. Here I’ll show using command prompt, as I fou ...
- 百度地图API 定位一直4.9E-324
使用百度地图Android SDK 7.0定位坐标一直为4.9E-324,网上搜索了很多,但是均未解决我的问题,在此坐下解决记录,在设置权限中将应用添加信任即可!android 6.0 其他版本未测! ...
- NHibernate系列文章二十八:NHibernate Mapping之Auto Mapping(附程序下载)
摘要 上一篇文章介绍了Fluent NHibernate基础知识.但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping.只需在代码中定义一些Conv ...
- 26. linux查看端口占用情况
linux系统下,查看端口占用情况的命令:lsof -i[root@www ~]# lsof -i
- 微服务实战系列--Nginx官网发布(转)
这是Nginx官网写的一个系列,共七篇文章,如下 Introduction to Microservices (this article) Building Microservices: Using ...
- 灵活运用 SQL SERVER FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- htnl5中设置文本单行显示,超出部分打省略号,鼠标移到文本时alt出全部文本内容
Html代码: 1.<span class="my-span" title="无数无数无数无数无数">机构</span> Css样式: ...
- 解锁scott用户及设置密码
关于Oracle 10g scott用户解锁的方法两则 解决方法一. 首先确认已经安装oracle 数据库和客户端 在客户端DOS下执行如下语句: 注意提示符号 c:\sqlplus /nolog s ...