• 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()方法是原子的。等价于下面的代码(除了原子地执行此操作之外):

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

    像putIfAbsent()方法一样,重载后的remove()方法有两个参数:键和值。

    在调用时,只有当键映射到指定的值时才从map中删除这个键。如果不匹配,那么就不删除这个键,并返回false。

    如果值匹配键的当前映射内容,那么就删除这个键,这个方法是原子性的。这种操作的等价源代码(除了原子地执行此操作之外):

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

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

  • 相关阅读:
    第七十天 how can I 坚持
    第六十九天 how can I 坚持
    第六十八天 how can I 坚持
    第六十七天 how can I 坚持 (补昨天)
    第六十六天 how can I 坚持··
    第六十五天 how can I 坚持
    第六十四天 how can i 坚持
    第六十三天 how can I 坚持
    MyEclipse10 中的两种FreeMarker插件的安装与配置
    画板社交工具开发分享——HTML5 canvas控件、PHP、社交分享学习(四)
  • 原文地址:https://www.cnblogs.com/faunjoe88/p/8001562.html
Copyright © 2020-2023  润新知