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

本文探讨了如何在并发环境中利用ConcurrentHashMap和AtomicInteger解决对同一对象的操作问题。通过ResourceLock工具类和Uset实体的示例,展示了在Test4测试类中的具体使用方法,确保了多线程下的数据一致性。
最低0.47元/天 解锁文章
1112

被折叠的 条评论
为什么被折叠?



