ConcurrentHashMap类的行为就像是HashMap,但是它设计工作在多线程中不需要明确同步。例如,你需要去检查map中是否包含着特殊的值,如下:
if (!map.containsKey("some string-based key"))
map.put("some string-based key", "some string-based value");

尽管这个例子是简单的,且可以工作,但它却不是安全线程。在使用map.containsKey()和map.put()的方法之间,其它的线程可能插入进来,这个可能被重写。为了解决这个问题,你应该在代码中明确同步,如下代码:

synchronized(map)
{
if (!map.containsKey("some string-based key"))
map.put("some string-based key", "some string-based value");
}

上面的代码片段,在map的读和写的操作中,我们加入了锁,然后去查询key的值是否存在map中,如果不存在,那么就添加到map中。当其它线程试图去调用这个map时,这个锁就会起到作用。

在ConcurrentHashMap<V>的类解决了这个的问题,调用VputIfAbsent(K key, V value)的方法,当key的值不存在时,就会插入key和value的值到map中。这个方法与下面的代码片段有点像:

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

应用putIfAbsent()的方法,前面的简单代码就可以被取代。

map.putIfAbsent("some string-based key", "some string-based value");

8.1.2 学习更多关于ConcurrentHashMap相关推荐

  1. [Java并发包学习]深度剖析ConcurrentHashMap

    [Java并发包学习]深度剖析ConcurrentHashMap 概述 还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到: HashMap是非线程安全的,Ha ...

  2. 教大家S40/java所有玩机技巧,喜欢请转载 加QQ657752021学习更多技术

    教大家S40/java所有玩机技巧,喜欢请转载 加QQ657752021学习更多技术 2012年01月11日 加QQ657752021 学习更多网络技术 希望大家支持橙音 [b]自己打造高品质音乐:[ ...

  3. 深入Java集合学习系列:ConcurrentHashMap之实现细节

    http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...

  4. 如何花更少的时间学习更多的知识

    花时间学习不见得就是真正的学习. 因为你的学习方法一开始就是错的话,那么花再多的时间在学习上也是无济于事. 所以你得看看这篇文章,如何花少量的时间却仍然学习到更多的知识.上帝给了我们每个人同样的时间, ...

  5. SpringBoot整合Easyexcel操作Excel,闲暇之余,让我们学习更多

    easyexcel 3.0.2 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boo ...

  6. Java初学者的学习路线建议

    网络上看到过很多的java工程师的学习路线,内容很多,对于java初级人员来说,这种学习路线看的多了,就很容易混淆,最后并不能给自己一个深刻的认识和理解,我将一些重点,干货整理出来. 一.基础 Jav ...

  7. Java学习---面试基础知识点总结

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类.sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程 ...

  8. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易

    近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...

  9. 怎样快速学习React

    react简单学习路线(实用版) 学习一门新的技术之前有必要了解一下该技术在专业领域的评价,使用的领域,以及整体的学习路线,总之尽可能多的在入坑之前了解相关方面的信息.不要什么都不去查就直接学了,这个 ...

  10. 吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)

            多隐含层神经网络的推导步骤非常类似于单隐含层神经网络的步骤,只不过是多重复几遍. 关于单隐含层神经网络公式的推导可以参考: http://blog.csdn.net/fengbingc ...

最新文章

  1. pip install 豆瓣源、清华源、阿里源、中国科技大学源
  2. 第二章 实验设计的考虑因素
  3. 【Nodejs】记一次图像识别的冒险
  4. ios 图片 相册 存储方式
  5. PyTorch深度学习实践07
  6. java 解析日期 t z_date - Java SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss'Z'”)给出时区为IST...
  7. 简单的oracle备份恢复批处理文件 -- 转
  8. NeurIPS 2021 Spotlight | PCAN: 高效时序建模, 提升多目标追踪与分割性能
  9. 怎么写显示商品图片_虾皮商店封面图片 虾皮商店介绍怎么写吸引人
  10. “Git 不是昙花一现!”
  11. python时序数据分析--以示例说明
  12. Java软件开发技术交流群
  13. 2022最新《人工智能入门指南》全套学习教程,全网阅读量10w+
  14. cad卸载_IT运维:CAD卸载不彻底,无法重装?
  15. XILINX FPGA最小逻辑单元CLBs, Slices和LUT区别
  16. 17周(胖子 大胖子 )
  17. 【T3】win10系统成功注册加密锁后,登录软件依然提示“产品未找到合法的license授权”
  18. matlab 变量上小尖尖,发动机最中间的那个小尖尖,你猜是什么?
  19. 连接远程电脑主机,pycharm远程调试代码方法
  20. Idea中怎么运行从github上下载的项目

热门文章

  1. 【bzoj1449/bzoj2895】[JSOI2009]球队收益/球队预算 费用流
  2. CSS flex 布局 一些基本属性应用
  3. 【网络基础编程】第三节 C/S
  4. 异或运算符 判断奇偶
  5. 验证码类库CaptchaMvc
  6. [九度][何海涛] 二叉树中和为某一值的路径
  7. OSPF1-5类LSA
  8. 防火墙双机热备配置实例(二)
  9. 华为QoS中CBQ队列详解
  10. NYOJ--1100--WAJUEJI which home strong!