1、使用 synchronized 關鍵字,代碼以下 java
synchronized(anObject) { 安全
value = map.get(key); spa
} 線程
2、使用 JDK1.5提供的鎖(java.util.concurrent.locks.Lock)。代碼以下 get
lock.lock(); 同步
value = map.get(key); it
lock.unlock(); 效率
3、使用 JDK1.5 提供的讀寫鎖(java.util.concurrent.locks.ReadWriteLock)。代碼以下 map
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、不一樣步確實最快,與預期一致。
2、四種同步方式中,ConcurrentHashMap 是最快的,接近不一樣步的狀況。
三、synchronized 關鍵字很是慢,比使用鎖慢了兩個數量級。若是需本身實現同步,則使用 JDK1.5 提供的鎖機制,避免使用 synchronized 關鍵字。