HashMap读写锁:
private static final ReadWriteLock LOCK = new ReentrantReadWriteLock();
public static final Lock W = LOCK.writeLock();
private static final Lock R = LOCK.readLock();
Map<String,String> map = new HashMap<>();
1.伪代码:
(1)在写的时候不让读
例:在写的地方加写锁
try{
//加锁
w.lock();
map.put(“1”,“1”);
map.put(“2”,“2”);
}catch(Exception e){
…
}finally {
//解锁
W.unlock();
}
//在读的地方加读锁:
public class ChannelMap {
private static final ReadWriteLock LOCK = new ReentrantReadWriteLock();
public static final Lock W = LOCK.writeLock();
private static final Lock R = LOCK.readLock();
private static class SingletonBuilder{
/**
* 单例对象实例
*/
static final Map<String,String> HASH_MAP = new HashMap<>();
}
//在读的地方加读锁:
public static Map<String,String> getMap() {
try {
R.lock();
return SingletonBuilder.HASH_MAP;
} catch (Exception e) {
e.printStackTrace();
}finally {
R.unlock();
}
return new HashMap<>();
}
/**
* private的构造函数用于避免外界直接使用new来实例化对象
*/
private ChannelMap() {
}
}