Map 線程安全四種方法:
1、使用 synchronized 關鍵字,代碼如下
synchronized(anObject) { value = map.get(key); }
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();
4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap(並發哈希) 類。該類將 Map 的存儲空間分為若干塊,每塊擁有自己的鎖,減少了多個線程爭奪同一個鎖的情況。
Map<Long, String> conMap = new ConcurrentHashMap<Long, String>();
比較:
1、不同步確實最快,與預期一致。
2、四種同步方式中,ConcurrentHashMap 是最快的,接近不同步的情況。
3、synchronized 關鍵字非常慢,比使用鎖慢了兩個數量級。如果需自己實現同步,則使用 JDK1.5 提供的鎖機制,避免使用 synchronized 關鍵字。
原文鏈接:https://blog.csdn.net/sswqzx/java/article/details/88954897