本文转载:http://blog.csdn.net/xuefeng0707/article/details/40834595
在JDK 老版本中。arrayList hashMap 都是不安全的。后来HashTable是在每个方法加synchronized,也可以实现线程安全,但是效率很慢。所以一般建议是不用的。
在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此list ,Map也有安全的了。并且效率很高。
主要说说 ConcurrentHashMap
从ConcurrentHashMap的源代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中。
简单的说。就是这个ConcurrentHashMap 中是分段存储的。数据是一块一块存储的。对每一块数据都是分开加锁的机制。这样如果取的数据不是同一个块里面的,就不会阻塞。这样就比整个集合加锁,效率要高很多。一般来说是高16倍。