ConcurrentHashMap如何在java项目中使用-创新互联
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 ConcurrentHashMap lockMap = 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 + "]";
}
}
} 本文标题:ConcurrentHashMap如何在java项目中使用-创新互联
文章地址:http://www.jxjierui.cn/article/dhdjeo.html


咨询
建站咨询
