线程安全集合,了解一下

  • Collection

    • List
      • CopyOnWriteArrayList
      • Vector
    • Set
      • CopyOnWriteArraySet
  • Map

    • Hashtable
    • ConcurrentMap
      • ConcurrentHashMap

Hashtable

的函数都是同步的,他是线程安全的
key、value都不可以为null,映射不是有序的
方法都有synchronized修饰


public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable {


//默认的加载因子是0.75
 public Hashtable(Map<? extends K, ? extends V> t) {
        this(Math.max(2*t.size(), 11), 0.75f);
        putAll(t);
    }

ConcurrentHashMap

允许多个修改操作并发进行,使用了锁分离技术,即代码块,不是方法锁
使用多个锁来控制对hash表的不同部分进行的修改
concurrentHashMap内部使用段Segment 来表示这些不懂的部分,
每段其实就是一个小的hash table
使用自己的ReentrantLock来实现的


public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
    implements ConcurrentMap<K,V>, Serializable {

CopyOnWriteArrayList

使用了reentrantLock的lock来加锁
是一个线程安全的List接口的实现

public class CopyOnWriteArrayList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

CopyOnWriteArraySet

大部分调用CopyOnWriteArrayList

public class CopyOnWriteArraySet<E> extends AbstractSet<E>
        implements java.io.Serializable

CopyOnWrite

CopyOnWrite容器即写时复制容器。
就是往一个容器添加元素的时候,不直接往当前容器添加
而是先将当前容器进行copy出一个新的容器,然后向新的容器里添加元素
添加完成之后
将原容器的引用指向新的容器
这样就可以进行并发的读写,而不需要加锁

基于读写分离的思想
多线程添加元素的时候会copy出多个副本出来

适合于读多写少的并发场景

内存占用问题:多线程时,内存消耗太多
数据一致性:只能保证数据的最终一致性

Vector

矢量队列,通过数组保存数据

StringBuffer

线程安全
使用的synchronized锁

StringBuilder

线程不安全

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值