ConcurrentHashMap的putAll方法可以保证put的所有元素在同一个元子操作中吗?

作者&投稿:禤狠 (若有异议请与网页底部的电邮联系)
ConcurrentHashMap 中putIfAbsent 和put的区别~

Java中ConcurrentHashMap putifAbsent方法的例子

很多时候我们希望在元素不存在时插入元素,我们一般会像下面那样写代码

synchronized(map){
if (map.get(key) == null){
return map.put(key, value);
} else{
return map.get(key);
}
}

上面这段代码在HashMap和HashTable中是好用的,但在CHM中是有出错的风险的。这是因为CHM在put操作时并没有对整个Map加
锁,所以一个线程正在put(k,v)的时候,另一个线程调用get(k)会得到null,这就会造成一个线程put的值会被另一个线程put的值所覆
盖。当然,你可以将代码封装到synchronized代码块中,这样虽然线程安全了,但会使你的代码变成了单线程。CHM提供的
putIfAbsent(key,value)方法原子性的实现了同样的功能,同时避免了上面的线程竞争的风险。

和HashMap方法一样,也是用put添加元素,LinkedHashMap也是java.util.Map的实现类

区别在于
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

1,map的putAll和clear不可以保证在所有的元素在同一个元子操作中。ConcurrentHashMap 将 map中数据通过hash 散列到32个Segment 中,Segment 是 ConcurrentHashMap 一个内部类,他继承了ReentrantLock ,ConcurrentHashMap 将锁进行分化到每一个Segment中,只有对同一个Segment 元素的读写时 才会阻塞,否则是无阻塞的,这样就大大的提高了并发的执行速度。


什么是Oncurrent 事件
是Access 2007编程的时候用的,下面有具体应用方法的实例:OnCurrent 属性 适用于: Microsoft Office Access 2007 适用于 Form 对象 设置或返回窗体的“属性”窗口中“成为当前”框的值。可读\/写 String 类型。expression.OnCurrent expression 必选。一个表达式,返回“适用于”列表中的某个对象。注解 此...

getuserbaseoncurrentuser是什么意思
get user base on current user意思是获取当前用户的用户基础。词汇解释:get 英[get] 美[ɡɛt]vt. 得到; 抓住; 说服; 受到(惩罚等);vt. 到达,来;vi. 成为; 开始; 设法对付; 获得利益或财富;[例句]The boys were getting bored.男孩子们开始感到厌烦。user 英[&...

current是什么意思?说明白些.
形容词 adj. 流通的;通用的 passing or handed on from person to person; in general use · This coin will pass curent here.这钱在这里通用。形容词 adj. (指时间)时下的 (of time) now passing · I shall see you on the 9th current.我将于本月9日来访你。· current English...

current怎么读
current的读音是:英['k_r_nt]。current的详尽释义是n.(名词)潮流(水、气、电)流趋势,趋向流动思潮,风潮《潮流》月刊。current【近义词】现代。一、详尽释义点此查看current的详细内容 n.(名词)潮流(水、气、电)流趋势,趋向流动思潮,风潮《潮流》月刊 adj.(形容词)通用的,普遍的,流通的...

什么是Current
Current的中文意思是趋势。 Current 一、读音 英['kʌrənt] 美['kɜːrənt] 二、含义 n.趋势;(水、气、电)流 adj.现在的;流通的 三、例证 Theblockbecomesmagneticwhenthecurrentisswitchedon. 通电时线圈即具磁性。 四、词汇搭配 1、currentbelief普遍的观点 2、currentdifficulty目前的困难 ...

NO Flash movie found on current page. 什么意思?
正浏览的网页上没发现多媒体电影

google play services is not installed on current device什么意思,我...
这个是提示您,google播放服务未能安装在此设备上 建议您重新启动后在安装,如不行,可能需要重新安装操作系统。

current基本词义
current of time"则指代时势或时代潮流。例如,句子"This button switches the current on"表明电钮可以控制电流的通断;"The current is strongest in the middle of the river"则说明河流中心水流最急。另一方面,"This word is no longer in current use"提醒我们某个词汇已不再流行或使用。

current是什么意思啊(current什么意思)
3.Whatisthecurrentthinkingonthisquestion?目前对这个问题的看法是什么?电源上的current做什么用 电源上的current是电流的意思,用来提供设备或电路所需要的电流。具体来说,电流是通过电源输出的,它提供设备和电路所需的电能,比如驱动电机和灯等。此外,电流还可以控制电路中的元件(如晶体管、二极管等)...

balance of payment on current account的数是负数表示什么
表示银行的 current account 也就支票帐户的balance of payment 借方余额透支,可能要再深入看支票帐户的balance of receivable才能确定真正余额如何 ;

黄龙县19814592711: JAVA中线程安全的map有哪些? -
牧眨小儿: JAVA中线程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap.java中map中线程安全怎么实现:1. 同步的map就是Hashtable, concurrenthashmap.2. 你看到的Hashtable就是直接在hashmap上加了个锁,concurrenthashmap...

黄龙县19814592711: java concurrenthashmap和hashmap的区别 -
牧眨小儿: 最大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的.为什么线程安全呢:ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中.在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:

黄龙县19814592711: 如何在java中使用ConcurrentHashMap -
牧眨小儿: 参考如下内容:ConcurrentHashMap锁的方式是稍微细粒度的. ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶.试想,原来 只能一个线程进入,现在却能同时16个写线程进入(写...

黄龙县19814592711: java 如何遍历concurrenthashmap -
牧眨小儿: 和遍历HashMap是一样的,有多种方法,给出计算较少的一种 ConcurrentHashMap<K,V> map=....数据 for(Map.Entry<K,V> e: map.entrySet() ){System.out.println("键:"+e.getKey()+", 值:"+e.getValue()); }

黄龙县19814592711: ConcurrentHashMap 弱一致的迭代器 是什么原理 -
牧眨小儿: 举个例子:比如AB两个线程都在迭代ConcurrentHashMap ,假如有16个元素,A迭代到第7个时删除了那个元素 B此时才迭代到第3个元素 当删除了第7个元素的时候,B会感知到已删除,所以B的后续迭代都是真实的数据.

黄龙县19814592711: ConurrentHashMap和Hashtable的区别 -
牧眨小儿: Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间.因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map.简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map.

黄龙县19814592711: hashmap和concurrenthashmap的区别,hashmap的底层源码 -
牧眨小儿: 你好. 有并发访问的时候用ConcurrentHashMap,效率比用锁的HashMap好 功能上可以,但是毕竟ConcurrentHashMap这种数据结构要复杂些,如果能保证只在单一线程下读写,不会发生并发的读写,那么就可以试用HashMap.ConcurrentHashMap读不加锁,写...

黄龙县19814592711: concurrenthashmap是怎么实现线程安全的 -
牧眨小儿: 在ConcurrentHashMap没有出现以前,jdk使用hashtable来实现线程安全,但是hashtable是将整个hash表锁住,所以效率很低下.ConcurrentHashMap将数据分别放到多个Segment中,默认16个,每一个Segment中又包含了多个HashEntry列表...

黄龙县19814592711: java并发类有哪些 -
牧眨小儿: 1、常用的并发集合类 ConcurrentHashMap:线程安全的HashMap的实现 CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素 ArrayBlockingQueue:基于数组、先...

黄龙县19814592711: ConcurrentMap和HashMap的区别 -
牧眨小儿: 类 HASHMAP<K,V> 所有已实现的接口:Serializable, Cloneable, Map<K,V> 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网