线程安全的集合

集合

#集合大概有4种类型:List   Set   Queue  Map

其中Vector、HashTable、Properties是线程安全的。其中ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的。(线程不安全是指:当多个线程访问同一个集合或Map时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。)

Collections提供多个获取线程安全的集合

在这里插入图片描述

CopyOnWriteArraylist

 #写有锁 读无锁的集合 加强版的读写分离 );

其实现的原理为 :
写操作原理 :将底层的数组做了一次复制,写的是新数组 完成了赋值之后再讲新数组替换旧数组 每调用一次写 底层数组都会扩容一次 ,
读操作原理 :读的是写操作完成之前的旧数组 ,写完成之后才能读到新数组的赋值。

CopyOnWriteArraySet(

 #序  无下标 元素不允许重复 

线程安全的Set集合底层使用CopyOnWriteArraylist实现,不同的是在使用addIfAbsent() 添加元素,会遍历数组 ,如果有存在的元素则不添加 。
其实现的原理为 :
表面上使用add方法,底层使用的是CopyOnWriteArraylist的addIfAbsent() 来判断要插入的新值是否存在

ConcurrentHashMap

 #   底层原理分两种 1.7和1.8版本

1.7 版本:初始容量为16段(Segment)为每个段加锁 当多个对象存入同一个段时 才需要互斥 使用方式与Hashmap无异

其实现的原理: 原理:使用分段锁 当多线程去访问其中的一个段时 如果是空值 直接赋上 ,如果有值 则去判断Key如果相同则覆盖 不相同 则存在最后一个值的next上面

   1.8版本:通过CA原理:同步锁锁的是标头对象 

,拿到锁的对象要先做节点遍历,查看有没有相同的Key值相同覆盖 不同则挂在最后一个节点上面的next上面
S交换算法和同步算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值