ConcurrentHashMap如何在java项目中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
在加格达奇等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站建设 网站设计制作定制网站开发,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销,外贸网站建设,加格达奇网站建设费用合理。java 使用ConcurrentHashMap
在某些场景下,我们想让线程根据某些业务数据进行排队,简单代码如下:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; public class TestServiceImpl { private static ConcurrentHashMaplockMap = new ConcurrentHashMap (40); public void test(Long userId){ LockObj lock = tryLock(userId); synchronized (lock) { try{ //处理业务 } finally{ unLock(lock); } } } private LockObj tryLock(Long key) { LockObj curVal = new LockObj(key); LockObj preVal = lockMap.putIfAbsent(key, curVal); if (null == preVal) { curVal.inc(); return curVal; } else{ preVal.inc(); } return preVal; } private void unLock(LockObj lock){ if (lock.dec() <= 0){ lockMap.remove(lock.getKey()); } } public class LockObj { private long key = 0; private AtomicInteger count = new AtomicInteger(0); public LockObj(long key){ this.key = key; } public int inc(){ return count.incrementAndGet(); } public int dec(){ return count.decrementAndGet(); } public long getKey(){ return key; } @Override public String toString() { return "LockObj [key=" + key + ", count=" + count + "]"; } } }