亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java基于ConcurrentHashMap設計細粒度實現代碼

2024-07-13 10:12:55
字體:
來源:轉載
供稿:網友

細粒度鎖:

       java/246164.html">java中的幾種鎖:synchronized,ReentrantLock,ReentrantReadWriteLock已基本可以滿足編程需求,但其粒度都太大,同一時刻只有一個線程能進入同步塊,這對于某些高并發的場景并不適用。比如銀行客戶a向b轉賬,c向d轉賬,假如這兩個線程并發,代碼其實不需要同步。但是同時有線程3,e向b轉賬,那么對b而言必須加入同步。這時需要考慮鎖的粒度問題,即細粒度鎖。

    網上搜尋了一些關于java細粒度鎖的介紹文章,大部分是提供思路,比如樂觀鎖,String.intern()和類ConcurrentHashMap,本人對第三種比較感興趣,為此研究了下ConcurrentHashMap的源碼。基于ConcurrentHashMap設計細粒度大志思路如下

Map locks = new Map(); List lockKeys = new List();for (int number : 1 - 10000) {	Object lockKey = new Object();	lockKeys.add(lockKey);	locks.put(lockKey, new Object());}public void doSomeThing(String uid) {	Object lockKey = lockKeys.get(uid.hash() % lockKeys.size());	Object lock = locks.get(lockKey);	synchronized(lock) {		// do something	}}

具體實現如下:

public class LockPool {	//用戶map	private static ConcurrentHashMap<String,Object> userMap=new ConcurrentHashMap<String,Object>();	//用戶金額map	private static ConcurrentHashMap<String,Integer> moneyMap=new ConcurrentHashMap<String,Integer>();	public static void main(String[] args) {		LockPool lockPool=new LockPool();		ExecutorService service = Executors.newCachedThreadPool();		service.execute(lockPool.new Boss("u2"));		service.execute(lockPool.new Boss("u1"));		service.execute(lockPool.new Boss("u1"));		service.execute(lockPool.new Boss("u3"));		service.execute(lockPool.new Boss("u2"));		service.execute(lockPool.new Boss("u2"));		service.execute(lockPool.new Boss("u3"));		service.execute(lockPool.new Boss("u2"));		service.execute(lockPool.new Boss("u2"));		service.execute(lockPool.new Boss("u4"));		service.execute(lockPool.new Boss("u2"));		service.shutdown();	}	class Boss implements Runnable{		private String userId;		Boss(String userId){			this.userId=userId;		}		@Override		    public void run() {			addMoney(userId);		}	}	public static void addMoney(String userId){		Object obj=userMap.get(userId);		if(obj==null){			obj=new Object();			userMap.put(userId,obj);		}		//obj是與具體某個用戶綁定,這里應用了synchronized(obj)的小技巧,而不是同步當前整個對象		synchronized (obj) {			try {				System.out.println("-------sleep4s--------"+userId);				Thread.sleep(4000);				System.out.println("-------awake----------"+userId);			}			catch (InterruptedException e) {				e.printStackTrace();			}			if(moneyMap.get(userId)==null){				moneyMap.put(userId,1);			} else{				moneyMap.put(userId, moneyMap.get(userId)+1);			}			System.out.println(userId+"-------moneny----------"+moneyMap.get(userId));		}	}}

 測試結果:

-------sleep4s--------u2-------sleep4s--------u1-------sleep4s--------u3-------sleep4s--------u4-------awake----------u2-------awake----------u3-------awake----------u1u2-------moneny----------1u1-------moneny----------1-------sleep4s--------u1u3-------moneny----------1-------sleep4s--------u2-------sleep4s--------u3-------awake----------u4u4-------moneny----------1-------awake----------u1u1-------moneny----------2-------awake----------u3u3-------moneny----------2-------awake----------u2u2-------moneny----------2-------sleep4s--------u2-------awake----------u2u2-------moneny----------3-------sleep4s--------u2-------awake----------u2u2-------moneny----------4-------sleep4s--------u2-------awake----------u2u2-------moneny----------5-------sleep4s--------u2-------awake----------u2u2-------moneny----------6

測試結果來看,只有相同userId的線程才會互斥,同步等待;不同userId的線程沒有同步

總結

以上就是本文關于java基于ConcurrentHashMap設計細粒度實現代碼的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女主播视频| 精品久久久久久电影| 国产精品嫩草视频| 国产成人精品久久二区二区91| 欧美日本亚洲视频| 亚洲肉体裸体xxxx137| 久久精品美女视频网站| 欧美视频中文字幕在线| 狠狠综合久久av一区二区小说| 亚洲最大的成人网| 欧美激情成人在线视频| 97avcom| 国产有码在线一区二区视频| 亚洲mm色国产网站| 日本欧美黄网站| 国产精品第一第二| 亚洲自拍偷拍一区| 国产一区二区欧美日韩| 在线观看成人黄色| 日韩av免费网站| 91免费精品视频| 中文字幕亚洲欧美日韩在线不卡| 欧美日韩国产丝袜美女| 亚洲www在线| 色小说视频一区| 国产精品v片在线观看不卡| 午夜精品久久久久久久99热浪潮| 亚洲精品美女久久久| 亚洲第一页自拍| 黑人巨大精品欧美一区二区免费| 久久久91精品国产| 亚洲女人被黑人巨大进入al| 日韩中文字幕网址| 狠狠久久五月精品中文字幕| 亚洲精品视频在线观看视频| 欧美午夜片欧美片在线观看| 久久97久久97精品免视看| 中文字幕亚洲精品| 久久人体大胆视频| 亚洲区bt下载| 精品国产美女在线| 日本久久精品视频| 成人免费福利视频| 久久午夜a级毛片| 成人观看高清在线观看免费| 久久91超碰青草是什么| 国产精品男人爽免费视频1| 精品国产欧美一区二区五十路| 精品国产美女在线| 欧美成人午夜激情视频| 亚洲精品天天看| 超在线视频97| 亚洲老司机av| 精品在线欧美视频| 亚洲人线精品午夜| 久久国产精品久久久久| 日韩av大片在线| 国产v综合v亚洲欧美久久| 日本久久久久久久久久久| 日韩综合中文字幕| 亚洲成人久久网| 亚洲国产天堂网精品网站| 狠狠操狠狠色综合网| 久久韩国免费视频| 久久露脸国产精品| 国产一区二区丝袜高跟鞋图片| 亚洲a级在线播放观看| 国产日韩在线视频| 亚洲精品视频播放| 91理论片午午论夜理片久久| 久热精品视频在线| 国产999精品久久久影片官网| 久久精品国产亚洲7777| 欧美成人午夜剧场免费观看| 国产精品色悠悠| 精品自拍视频在线观看| 欧美大成色www永久网站婷| 欧美在线视频播放| 综合136福利视频在线| 91精品久久久久久久久久久久久| 久久久精品国产一区二区| 亚洲国产97在线精品一区| 成人午夜黄色影院| 91视频88av| 欧美伊久线香蕉线新在线| 欧美大片在线看免费观看| 日韩av片免费在线观看| 欧美成人午夜视频| 国产精品a久久久久久| 久久久久久久久中文字幕| 成人av.网址在线网站| 欧美二区乱c黑人| 欧美视频免费在线观看| 黄色成人av网| 亚洲精品国产精品自产a区红杏吧| 这里只有精品视频在线| 亚洲精品久久视频| 国产精品视频中文字幕91| 国产精品福利久久久| 亚洲欧美日韩一区二区三区在线| 成人久久久久久久| 国产精品吴梦梦| 欧美色视频日本版| 蜜臀久久99精品久久久久久宅男| 亚洲欧洲高清在线| 成人亚洲激情网| 热久久免费国产视频| 日韩精品免费在线播放| 亚洲mm色国产网站| 欧美与欧洲交xxxx免费观看| 欧美激情久久久| 在线播放国产一区中文字幕剧情欧美| 亚洲成人中文字幕| 欧美丰满少妇xxxxx| 久久影视电视剧凤归四时歌| 久久久精品视频在线观看| 最新国产精品亚洲| 欧美巨乳在线观看| 久久精品视频中文字幕| 精品在线观看国产| 色一情一乱一区二区| 91欧美精品成人综合在线观看| 欧美日韩在线视频一区| 精品久久久久久久中文字幕| 欧美精品一区二区免费| 日韩av在线网址| 国产成人精品电影| 亚洲成人精品av| 亚洲欧美另类人妖| 91国产美女在线观看| 亚洲第一精品电影| 国产精品激情av电影在线观看| 亚洲欧美在线免费观看| 久久久免费精品视频| 欧美与黑人午夜性猛交久久久| 精品久久久久久久久久久久久久| 国产91久久婷婷一区二区| 国产精品视频久久久久| 国产精品久久久久久久久男| 亚洲视频在线免费看| 亚洲精品一区中文字幕乱码| 日韩精品在线电影| 97精品伊人久久久大香线蕉| 2019中文字幕在线免费观看| 久久久之久亚州精品露出| 午夜精品在线视频| 国产精品久久久久久久av大片| 国产区精品在线观看| 成人av.网址在线网站| 欧美国产日韩xxxxx| 欧美性猛交xxxx乱大交极品| 日韩午夜在线视频| 亚洲最大的成人网| 精品欧美一区二区三区| 亚洲精品suv精品一区二区| 成人动漫网站在线观看| 日韩欧美国产高清91| 国产成人综合久久| 欧美最猛性xxxxx(亚洲精品)| 国产精品免费视频久久久| 日韩欧美一区二区在线| 中文字幕av一区二区三区谷原希美| 久久国产精品99国产精| 久久全国免费视频|