SynchronizedMap如何让HashMap具备线程安全
问题:SynchronizedMap如何让HashMap具备线程安全
1. 首先利用SynchronizedMap的构造函数获取map的对象,而该构造器可以传入一个HashMap的集合作为参数
2. SynchronizedMap底层通过一个互斥信号量mutex(final Object) 进行方法同步的限定,
synchronized(mutex)进行加锁,达到线程同步的效果,如下源码所示
SynchronizedMap(Map<K,V> m) { if (m==null) throw new NullPointerException(); this.m = m; mutex = this; } SynchronizedMap(Map<K,V> m, Object mutex) { this.m = m; this.mutex = mutex; } public int size() { synchronized(mutex) {return m.size();} } public boolean isEmpty(){ synchronized(mutex) {return m.isEmpty();} } public boolean containsKey(Object key) { synchronized(mutex) {return m.containsKey(key);} }
3.使用方式:
Map<String,Long> user = Collections.synchronizedMap(new HashMap<>());
user.put("xsj",1234567l);
System.out.println(user.get("xsj"));
- 上一篇: 两个链表的第一个公共节点
- 下一篇: Mysql的存储引擎