http://blog.sina.com.cn/s/blog_5157093c0100hm3y.html java5中新增了ConcurrentMap接口和它的一个实现类ConcurrentHashMap.ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制.Hashtable中采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作:而ConcurrentHashMap中则是一次锁住一个桶.ConcurrentHas…
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt215 SynchronizedMap和ConcurrentHashMap的深入分析 在开始之前,先介绍下Map是什么? javadoc中对Map的解释如下: An objectthat maps keys to values . Amap cannot contain duplicatekeys; each key can map to at most one value.…
如何使用 概述 ConcurrentHashMap: 线程安全: 其将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁(即锁分段技术): ConcurrentHashMap让锁的粒度更精细一些,并发性能更好: SynchronizedMap: 线程安全: 通过synchroni…
    对于map的并发操作有HashTable.Collections.synchronizedMap和ConcurrentHashMap三种,到底性能如何呢? 测试代码: package com.yangyang; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.concurrent.Concur…
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp18 Hashtable.synchronizedMap.ConcurrentHashMap 比较 2011-08-29 17:13:16 util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的.线程安全的实现.Brian Goetz向您展示了用ConcurrentHashMap替换Hashtable或syn…
为什么要比较Hashtable.SynchronizedMap().ConcurrentHashMap之间的关系?因为常用的HashMap是非线程安全的,不能满足在多线程高并发场景下的需求. 那么为什么说HashTable是线程不安全的?具体参阅关于java集合类HashMap的理解 如何线程安全的使用HashMap 了解了 HashMap 为什么线程不安全,那现在看看如何线程安全的使用 HashMap.这个无非就是以下三种方式: Hashtable ConcurrentHashMap Sync…
首先需要明确的是,不管使用那种Map,都不能保证公共混合调用的线程安全,只能保证单条操作的线程安全,在这一点上各Map不存在优劣. 前文中简单说过HashTable和synchronizedMap,其实这两个类不需要说太多,把代码贴一下相信看过Java多线程的就能很容易理解了. HashTable HashTable的话,实现这个样子的.可以看到的是,对于Hash表的所有操作,HashTable都加了锁,但也只能保证单条操作的线程安全. public synchronized V get(Obj…
前面文章提到Collections.synchronizedMap()与ConcurrentHashM两者都提供了线程同步的功能.那两者的区别在哪呢?我们们先来看到代码例子.    下面代码实现一个线程对map进行写操作,另一个线程,读出并打印map数据. package test.map; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; import java.util.Ma…
Collections.synchronizedMap()与ConcurrentHashMap主要区别是:Collections.synchronizedMap()和Hashtable一样,实现上在调用map所有方法时,都对整个map进行同步,而ConcurrentHashMap的实现却更加精细,它对map中的所有桶加了锁.所以,只要要有一个线程访问map,其他线程就无法进入map,而如果一个线程在访问ConcurrentHashMap某个桶时,其他线程,仍然可以对map执行某些操作.这样,Co…
SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步! public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);} } ConcurrentHashMap的实现却更加精细,他对要操作的桶加锁,而不是整个加锁,所以ConcurrentHashMap在性能以及安全性方面更加有优势. final V putVal(K key, V value, boolean onlyI…