当前位置: 首页 > news >正文

网站优化公司开始上班了合肥推广外包公司

网站优化公司开始上班了,合肥推广外包公司,建网站的公司广州排名,做网站怎么才能找到靠谱的网络公司Java集合大致可分为Set、List和Map三种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java 5之后,增加了Queue体系集合,代表一种队列集合实现。 JDK1.5版本中&#…

Java集合大致可分为Set、List和Map三种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java 5之后,增加了Queue体系集合,代表一种队列集合实现。

JDK1.5版本中,加入java.uill.concurrent包,其中包含集合的线程安全方式的实现。本文仅探讨concurrent包下面的Map接口实现。

1. concurrent包下面Map子接口、类框架图

2. ConcurrentMap接口、ConcurrentHashMap类

2.1 它是什么?

ConcurrentHashMap是一个线程安全的哈希表,它的主要功能是提供了一组和HashMap功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。

2.2 它的工作原理?

ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构,一个Segment其实就是一个类Hash Table的结构,Segment内部维护了一个链表数组,我们用下面这一幅图来看下ConcurrentHashMap的内部结构:

从上面的结构我们可以了解到,ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,因 此,这一种结构的带来的副作用是Hash的过程要比普通的HashMap要长,但是带来的好处是写操作的时候可以只对元素所在的Segment进行加锁即可,不会影响到其他的 Segment,这样,在最理想的情况下,ConcurrentHashMap可以最高同时支持Segment数量大小的写操作(刚好这些写操作都非常平均地分布在所有的Segment上),所以,通过这一种结构,ConcurrentHashMap的并发能力可以大大的提高。

2.3 它实现的ConcurrentMap接口方法:

  • V putIfAbsent(K key, V value): 如果指定键已经不再与某个值相关联,则将它与给定值关联;推荐使用该方法,而不是使用Map接口的put()方法。
  • boolean remove(Object key, Object value): 只有目前将键的条目映射到给定值时,才移除该键的条目。
  • boolean replace(K key, V oldValue, V newValue): 只有目前将键的条目映射到给定值时,才替换该键的条目。
  • V replace(K key, V value): 只有目前将键的条目映射到某一值时,才替换该键的条目。

2.4 它实现的Map接口主要方法:

  • V get(Object key): 返回此表中指定键所映射到的值;此操作不涉及到锁,也就是说获得对象时没有使用锁。
  • Set<Map.Entry<K,V>> entrySet(): 该视图的返回的 iterator 是一个“弱一致(weakly consistent)”的迭代器,它从来不会抛出 ConcurrentModificationException,并且确保可遍历迭代器构造时存在的元素,此外还可能(但并不保证)反映构造后的所有修改。

2.5 ConcurrentMap接口的putIfAbsent()与remove()方法详解:

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

   if (!map.containsKey(key)) return map.put(key, value);elsereturn map.get(key);

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

if (map.get(key).equals(value)) {map.remove(key);return true;} else return false;

由此可以看出,java.util.concurrent.ConcurrentMap 接口和 ConcurrentHashMap 实现类可以实现只能在键不存在时将元素加入到map中;只有键存在且映射到特定值时才能从map中删除一个元素。

转载于:https://www.cnblogs.com/nayitian/p/3319379.html

http://www.lbrq.cn/news/2440909.html

相关文章:

  • 30多了学网站建设晚吗广告大全
  • easyui做的网站旺道seo系统
  • 技术支持 东莞网站建设防水工程新媒体培训
  • 重庆公司网站 技术支持企业全网推广
  • 河北建设银行石家庄分行招聘网站小红书seo关键词优化多少钱
  • 香河做网站shijuewang关键词批量调词软件
  • 做产品表情的网站外链发布网站
  • 做西服的网站成都网站排名 生客seo
  • 购物网站怎么做优化网站站长seo推广
  • 电子商务网站的设计网络营销方式包括哪些
  • 网站域名行业动态搜索引擎营销的6种方式
  • 网站的彩色标签怎么做的seo超级外链
  • ps网站建设目标推广文案范例
  • 中国能源建设集团招聘网站关键词优化营销
  • 二维码图片seo精华网站
  • 做网站多少钱特惠西宁君博s百度广告太多
  • 杭州论坛网seo是什么意思 seo是什么职位
  • 禅城区网站建设公司营销组合策略
  • 做网站多少钱_西宁君博优选长沙官网seo收费标准
  • 网站内页权重佛山网站建设维护
  • 网站首页的重要性免费网站代理访问
  • 网站建设项目技术seo排名优化点击软件有哪些
  • 做图标得英文网站外贸推广代理
  • 如何用front怕个做网站搜索引擎营销特点
  • 网站开发的运行可行性seo网站优化培训怎么样
  • 没有英文网站怎么做外贸厦门seo网络优化公司
  • 做公司网站的公青岛网站设计公司哪家好
  • 西安建设工程信息网站青岛网站建设制作推广
  • 服装批发做哪个网站好呢云南百度推广开户
  • 做内网网站教程佛山seo培训
  • Java排序中(a).compareTo(b)与Integer.compare(a, b)区别
  • 依赖倒置原则 Dependency Inversion Principle - DIP
  • 消息队列MQ常见问题和解决方案
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现
  • Photo Studio PRO 安卓版:专业级照片编辑的移动解决方案
  • Pspice仿真电路:(三十四)如何使用Pspcie进行仿真