各种加锁方法对于Map[转载]
hashmap是不带有锁的,hashtable是带有锁的,多线程使用过程中,需要对hashmap加锁,可以用
1.使用 synchronized 关键字,这也是最原始的方法。代码如下
synchronized(anObject) { value = map.get(key);}
lock.lock(); value = map.get(key); lock.unlock();
import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteMap<K, V> {private final Map<K, V> map;private final ReadWriteLock lock = new ReentrantReadWriteLock();private final Lock r = lock.readLock();private final Lock w = lock.writeLock();public ReadWriteMap(Map<K, V> map) {this.map = map;}public V put(K key, V value) {w.lock();try {return map.put(key, value);} finally {w.unlock();}}public V get(Object key) {r.lock();try {return map.get(key);} finally {r.unlock();}}}
value = map.get(key); //同步机制内置在 get 方法中