ResourceLock为工具类:
package com.ezhiyang.balcony.aibank.controller;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.log4j.Logger;
public class ResourceLock {
private static final Logger log = Logger.getLogger(ResourceLock.class);
// 初始化ConcurrentHashMap锁载体
private static final ConcurrentHashMap<String, AtomicInteger> lockMap = new ConcurrentHashMap<String, AtomicInteger>();
public static AtomicInteger getAtomicInteger(String key) {
if (lockMap.get(key) == null) {// 当实体ID锁资源为空,初始化锁
lockMap.putIfAbsent(key, new AtomicInteger(0));// 初始化一个竞争数为0的原子资源
}
int count = lockMap.get(key).incrementAndGet();// 线程得到该资源,原子性+1
log.debug("资源ID为:" + key + ",争抢线程数:" + count);
return lockMap.get(key);// 返回该ID资源锁
}
public static void giveUpAtomicInteger(String key) {
if (lockMap.get(key) != null) {// 当实体ID资源不为空,才可以操作锁,防止抛出空指针异常
int source = lockMap.get(key).decrementAndG