四种方法使Map线程安全
生活随笔
收集整理的這篇文章主要介紹了
四种方法使Map线程安全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
四種方法使Map線程安全
如果需要使 Map 線程安全,大致有這么四種方法:
1、使用 synchronized 關鍵字,這也是最原始的方法。代碼如下
synchronized(anObject) { value = map.get(key); }JDK1.2 提供了?Collections.synchronizedMap(originMap)?方法,同步方式其實和上面這段代碼相同。
2、使用 JDK1.5 提供的鎖(java.util.concurrent.locks.Lock)。代碼如下
lock.lock(); value = map.get(key); lock.unlock();3、實際應用中,可能多數操作都是讀操作,寫操作較少。
針對這種情況,可以使用 JDK1.5 提供的讀寫鎖(java.util.concurrent.locks.ReadWriteLock)。代碼如下
rwlock.readLock().lock(); value = map.get(key); rwlock.readLock().unlock();這樣兩個讀操作可以同時進行,理論上效率會比方法 2 高。
4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 類。
該類將 Map 的存儲空間分為若干塊,每塊擁有自己的鎖,大大減少了多個線程爭奪同一個鎖的情況。代碼如下
value = map.get(key); //同步機制內置在 get 方法中寫了段測試代碼,針對這四種方式進行測試,結果見附圖。
測試內容為 1 秒鐘所有 get 方法調用次數的總和。為了比較,增加了未使用任何同步機制的情況(非安全!)。理論上,不同步應該最快。
更多線程時,CPU 利用率提高,但增加了線程調度的開銷,測試結果與五個線程差不多。
從附圖可以看出:
結論:
總結
以上是生活随笔為你收集整理的四种方法使Map线程安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux命令04:info
- 下一篇: Django Sqlite3 数据库向M