jdk中concurrent包下的线程安全集合

多线程模式下,普通的HashMap或者HashSet存在线程安全性问题,可能出现多个线程同时对一个节点进行操作的现象。此外,多线程下是可能出现一个线程在遍历一个线程却在操作(写或者删除的事情)的情况,为了避免这种情况concurrent报下也提供了对应的类。concurrent共提供了5个类,分别为:

ConcurrentHashMap  线程安全的Map
ConcurrentSkipListMap 线程安全且具有排序功能的Map
ConcurrentSkipListSet 线程安全且具有排序功能的Set
CopyOnWriteArrayList 线程安全能够在遍历的过程中对List进行操作(包括写和删除)

CopyOnWriteArraySet 线程安全能够在遍历的过程中对Set进行操作(包括写和删除)


而这些类也提供的一个独特的入参:concurrencyLevel:并发级别。传入预估有多少个线程会同时访问这个Map

除此之外还有一些通用的参数:

size:表示HashMap中存放KV的数量(为链表和树中的KV的总和)。
capacity:译为容量。capacity就是指HashMap中桶的数量。默认值为16。每次扩充都是乘以2倍。
loadFactor:译为装载因子。装载因子用来衡量HashMap满的程度。loadFactor的默认值为0.75f。计算HashMap的实时装载因子的方法为:size/capacity,而不是占用桶的数量去除以capacity。
threshold:threshold表示当HashMap的size大于threshold时会执行resize操作。 threshold=capacity*loadFactor  这个值是不能设置的  通过capacity和loadFactor自动生成


Map中还提供了通用方法之外的额外的方法:

①:putIfAbsent:  

            if (!map.containsKey(key))

          return map.put(key, value);
     else
          return map.get(key);
   
②:replace(K key, V oldValue, V newValue)
            if (map.containsKey(key) && map.get(key).equals(oldValue)) {
 map.put(key, newValue);
 return true;
 }
            else
                return false;
   

③:replace(K key, V value)

        if (map.containsKey(key)) {

            return map.put(key, value);

     } else return null;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue_hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值