JDK 5.0 以后提供了多种并发类容器来替代同步类容器从而改善性能。同步类容器的 状态都是串行化的。他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时, 严重降低了应用程序的吞吐量。
并发类容器是专门针对并发设计的,使用 ConcurrentHashMap 来代替给予散列的传 统的 HashTable,而且在 ConcurrentHashMap 中,添加了一些常见复合操作的支持。以 及使用了 CopyOnWriteArraylist 代替 Voctor,并发的 CopyOnWriteArraySet。
以及 并发的 Queue,ConcurrentLinkedQueue 和 LinkedBlockingQueue,前者是高性能的队 列,后者是以阻塞形式的队列,具体实现 Queue 还有很多,例如 ArrayBlockingQueue、 PriorityBlockingQueue、SynchronousQueue 等。
12.1、ConcurrentHashMap
由于 HashMap 是线程不同步的,虽然处理数据的效率高,但是在多线程的情况下存在 着安全问题,因此设计了 CurrentHashMap 来解决多线程安全问题。 HashMap 在 put 的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是 rehash,这个会重新将原数组的内容重新 hash 到新的扩容数组中,在多 线程的环境下,存在同时其他的元素也在进行 put 操作,如果 hash 值相同,可能出现同时 在同一数组下用链表表示,造成闭环,导致在 get 时会出现死循环,所以 HashMap 是线程 不安全的。
JDK7 下的 ConcurrentHashMap</