我是靠谱客的博主 帅气夕阳,最近开发中收集的这篇文章主要介绍java多线程与并发之java并发编程实践,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用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 plain  copy
  1. if(!map.containsKey(key))  
  2.     return map.put(key,value);  
  3. else  
  4.     return map.get(key)  
像putIfAbsent()方法一样,重载后的remove()方法有两个参数:键和值。在调用时,只有当键映射到指定的值时才从map中删除这个键。如果不匹配,那么就不删除这个键,并返回false。如果值匹配键的当前映射内容,那么就删除这个键,这个方法是原子性的。这种操作的等价源代码(除了原子地执行此操作之外):
[java]  view plain  copy
  1. if(map.containsKey(key) && map.get(key).equals(value)){  
  2.     map.remove(key);  
  3.     return true;  
  4. }else return false;  
总之,ConcurrentMap中定义的方法是原子性的。

最后

以上就是帅气夕阳为你收集整理的java多线程与并发之java并发编程实践的全部内容,希望文章能够帮你解决java多线程与并发之java并发编程实践所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部