使用ConcurrentMap实现类

java.util.concurrent.ConcurrentMap接口和ConcurrentHashMap实现类 只能在键不存在时将元素加入到map中,只有在键存在并映射到特定值时才能从map中删除一个元素 。主要定义了下面几个方法(K表示键的类型,V表示值的类型):
1. V putIfAbsent(K key,V value) : 如果指定键已经不再与某个值相关联,则将它与给定值关联。
2. boolean remove(Object key,Object value) : 只有目前将键的条目映射到给定值时,才移除该键的条目。
3. boolean replace(K key,V oldValue,V newValue) : 只有目前将键的条目映射到给定值时,才替换该键的条目。
4. V replace(K key,V value) : 只有目前将键的条目映射到某一值时,才替换该键的条目。

putIfAbsent()方法用于在map中进行添加。这个方法以要添加到ConcurrentMap中的键的值为参数,就像普通的put()方法,但是只有在map不包含这个键时,才能将键加入到map中。如果map已经包含这个键,那么这个键的现有值就会保留。putIfAbsent()方法是原子的。等价于下面的代码(除了原子地执行此操作之外):

[java] view plaincopy
  1. if(!map.containsKey(key))
  2. return map.put(key,value);
  3. else
  4. return map.get(key)

像putIfAbsent()方法一样,重载后的remove()方法有两个参数:键和值。在调用时,只有当键映射到指定的值时才从map中删除这个键。如果不匹配,那么就不删除这个键,并返回false。如果值匹配键的当前映射内容,那么就删除这个键,这个方法是原子性的。这种操作的等价源代码(除了原子地执行此操作之外):

[java] view plaincopy
  1. if(map.containsKey(key) && map.get(key).equals(value)){
  2. map.remove(key);
  3. return true;
  4. }else return false;

总之,ConcurrentMap中定义的方法是原子性的。

java多线程与并发之java并发编程实践相关推荐

  1. java多线程 门闩_Java线程与并发编程实践----同步器(倒计时门闩,同步屏障)...

    Java提供的synchronized关键字对临界区进行线程同步访问.由于基于synchronized很难 正确编写同步代码,并发工具类提供了高级的同步器.倒计时门闩(countdown latch) ...

  2. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  3. Java并发编程实战_一线大厂架构师整理:java并发编程实践教程

    并发编程是Java语言的重要特性之一, 在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序.然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系.因此 ...

  4. java并发编程实践_Java并发编程实践如何正确使用Unsafe

    一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...

  5. 《Java线程与并发编程实践》—— 2.3 谨防活跃性问题

    本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.3节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  6. java并发编程实践(1)intro

    [0]README 0.1)本文部分文字描述转自"java并发编程实践",旨在学习"java并发编程实践(1)intro"的相关知识: [3]线程带来的风险 [ ...

  7. JAVA并发编程实践笔记

    2019独角兽企业重金招聘Python工程师标准>>> JAVA并发编程实践笔记 博客分类: java JAVA并发编程实践笔记 1, 保证线程安全的三种方法:     a, 不要跨 ...

  8. 《Java线程与并发编程实践》—— 2.6 小结

    本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.6节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  9. [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

    阅读<Java并发编程实践>一书后整理的思维导图.

  10. Java多线程精讲(非高并发-授课专用)附synchronized

    Java多线程精讲(非高并发-授课专用) 目录 程序,进程,线程的基本概念 start与run的区别 函数测试demo: 创建线程(一)[new Thread()] 创建线程(二)[extends T ...

最新文章

  1. [YY题]HDOJ5288 OO’s Sequence
  2. Google工作原理
  3. android 增删改查 源码_学生信息增删改查小程序案例(springboot服务端)
  4. JIRA6.3.6中设置用户的解决问题和关闭问题权限
  5. SHELL编程一二三
  6. 【bzoj5107】[CodePlus2017]找爸爸 dp
  7. 你这样的“垃圾“,就应该进入老年代!!!
  8. 用c++库函数实现WCHAR写入文件
  9. python绘制四边螺旋线代_Python绘制3d螺旋曲线图实例代码
  10. oracle内与外连接,Oracle (内连接)与(外连接)区别
  11. activeMQ的基本使用
  12. MCSA Server 2012 R2 Passthrough Disk
  13. English trip Spoken English Word List(updating...)
  14. 随机生成20以内加减法,5次答题并统计正确和错误题数
  15. 2020 杭电多校5 1007、1008、1011
  16. filebeat7.7.0相关详细配置预览- Setup ILM
  17. 学习笔记(14):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-打开rtmp推流输出并从文件读取音视频帧...
  18. 培训机构让考java证书有必要吗在线等
  19. 开源B2B2C WSTMart商城系统开发框架及插件介绍
  20. 3GPP 首个5G标准

热门文章

  1. AWS和阿里云对比研究二—阿里云
  2. java 104规约_电网104规约解包(java)
  3. WinQSB的19个子系统简介
  4. Python编程输出所有的“水仙花数”
  5. windows下安装VM虚拟机和Ubuntu系统(附注册密钥)
  6. 省市区三级联动(拼接写法)
  7. s-msckf代码笔记(二)
  8. 懒人工作源码分析(1)
  9. 漫画算法python篇pdf_漫画算法:小灰的算法之旅(Python篇)(全彩)
  10. 百度地图与 select下拉框的双向维护