集合之ConcurrentHashMap & Hashtable

 

 

HashMap在多线程环境下存在线程安全问题,那你一般都是怎么处理这种情况的?

一般在多线程的场景,可以使用好几种不同的方式去代替:

  • 使用Collections.synchronizedMap(Map)创建线程安全的map集合;

  • Hashtable

  • ConcurrentHashMap

不过出于线程并发度的原因,一般舍弃前两者使用最后的ConcurrentHashMap,他的性能和效率明显高于前两者。

Collections.synchronizedMap是怎么实现线程安全的你有了解过么?

在SynchronizedMap内部维护了一个普通对象Map,还有排斥锁mutex,如图

集合之ConcurrentHashMap & Hashtable

 

 我们在调用这个方法的时候就需要传入一个Map,可以看到有两个构造器,如果你传入了mutex参数,则将对象排斥锁赋值为传入的对象。

如果没有,则将对象排斥锁赋值为this,即调用synchronizedMap的对象,就是上面的Map。

创建出synchronizedMap之后,再操作map的时候,就会对方法上锁,如图全是

上一篇:线段树 (Segment Tree)


下一篇:一键完成MySQL主从部署.