ConcurrentHashMap如何在java項(xiàng)目中使用?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
java 使用ConcurrentHashMap
在某些場(chǎng)景下,我們想讓線(xiàn)程根據(jù)某些業(yè)務(wù)數(shù)據(jù)進(jìn)行排隊(duì),簡(jiǎn)單代碼如下:
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<Long, LockObj> lockMap = new ConcurrentHashMap<Long, LockObj>(40); public void test(Long userId){ LockObj lock = tryLock(userId); synchronized (lock) { try{ //處理業(yè)務(wù) } 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 + "]"; } } }
網(wǎng)頁(yè)名稱(chēng):ConcurrentHashMap如何在java項(xiàng)目中使用-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://www.chinadenli.net/article40/dhdjeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、App開(kāi)發(fā)、ChatGPT、網(wǎng)站收錄、電子商務(wù)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容