Concurrent和CopyOnWrite容器

一、ConcurrentMap容器
  concurrentMap接口下面有两个重要实现:
  ConcurrentHashMap
  ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap)
1、ConcurrentHashMap内部使用段(segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。把一个整体分成16个段(segment),也就是最高支持16个线程的并发修改操作。这也是在多线程场景时减小锁的粒度从而降低锁竞争的一种方案。并且代码中大多共享变量使用volatile关键字进行声明,目的是第一时间获取修改的内容,性能非常好。原理点击此处 / 此链接

public class UseConcurrentMap {
    public static void main(String[] args) {
        ConcurrentHashMap<String,Object> chm = new ConcurrentHashMap<String,Object>();
        chm.put("k1","v1");
        chm.put("k2","v2");
        chm.put("k3","v3");
        // 如果有相同的key,将不进行添加
        chm.putIfAbsent("k3","vvvvvv");

        for(Map.Entry<String,Object> entry : chm.entrySet()){
            System.out.println("key="+entry.getKey()+",value="+entry.getValue());
        }

    }
}

二、Copy-On-Write容器
  Copy-On-Write简称COW,是一种用于程序设计的优化策略(支持大量高并发的读)
  JDK中COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet,COW容器非常有用,可以在非常多的并发场景中用到。应用于写操作较小,并发读操作大的并发
Copy-On-Write容器是写时复制的容器。通俗理解来说,就是我们往一个容器中添加元素的时候,不直接向当前的容器中添加,而是先将当前的容器进行copy,复制出一个新的容器,然后在新的容器里添加元素,添加完元素之后,再将原容器的引用指向新容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前的容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想。读和写不同的容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值