美文网首页
线程安全的集合

线程安全的集合

作者: 雨景江水 | 来源:发表于2023-11-15 16:47 被阅读0次

注意:这些线程安全的集合类,指的是单个方法线程安全,多个方法组合可能就不安全了

讲的比较全的:
https://blog.csdn.net/qiukuqiuku/article/details/124484616

https://blog.csdn.net/TsuiXh/article/details/123503622
https://blog.csdn.net/qq_33789406/article/details/118736673

Collections.synchronizedList 原理:其实就是加了synchronized

https://www.jianshu.com/p/0b3e5df6fe57

一.List相关

① Vector
Vector是最古老的并发容器,其实现了List接口,方法都是默认加synchronized的,所以效率很低,现在基本不会用它。

②CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)
读时没影响不加锁,写时加锁,copy一个新list,然后扩展一个新元素,老引用指向新的。
原理:https://baijiahao.baidu.com/s?id=1693680818426335450&wfr=spider&for=pc

二.Set相关

① CopyOnWriteArraySet (java.util.concurrent.CopyOnWriteArrayList)
底层是数组,读时没影响不加锁,写时加锁,copy一个新list,然后扩展一个新元素,老引用指向新的。

三. Map相关

HashMap为什么线程不安全?
https://blog.csdn.net/huayushuangfei/article/details/121380703

①HashTable
和Vector一样古老的并发容器,其实现了Map接口,方法都是默认加synchronized的,效率低,基本也不用了。

② HashMap
HashMap的方法默认都是不加锁的,可以通过容器工具类的方法Collections.synchronizedMap(new HashMap<UUID, UUID>(),给它手动加锁,加锁后效率和HashTable差不多。

并发情况下可能会出现的问题:https://mikechen.cc/28162.html

③ ConcurrentHashMap:
https://blog.csdn.net/zycxnanwang/article/details/105424734
https://blog.csdn.net/gupaoedu_tom/article/details/124449788

jdk1.7: ConcurrentHashMap底层用的分段锁,所以其在效率上会有所提升,主要体现在读上面。由于它往里插的时候内部做了各种各样的判断,本来是链表的,到8之后又变成了红黑树,然后里面又做了各种各样的cas的判断,所以他往里插的数据相比HashTable还要低一点。

jdk1.8: 添加元素时首先会判断容器是否为空,
如果为空则使用 volatile 加 CAS 来初始化,
如果容器不为空,则根据存储的元素计算该位置是否为空。
如果根据存储的元素计算结果为空则利用 CAS 设置该节点

二. JUC包下面的集合

https://tool.4xseo.com/article/477368.html

  1. CopyOnWriteArrayList和CopyOnWriteArraySet 原理

https://www.cnblogs.com/chafry/p/16770916.html

相关文章

  • 集合的线程安全

    线程安全的集合:Vector、HashTable线程不安全的集合:ArrayList、LinkedList、Has...

  • 常用集合及源码解读

    在工作中集合的使用非常广泛,集合是分线程安全和线程不安全的。在多线程环境下,是需要使用线程安全的集合的,否则就会...

  • ConcurrentHashMap源码设计分析

    二、线程安全(Thread-safe)的集合对象:● Vector 线程安全● HashTable 线程安全● S...

  • Java 集合

    1、java集合分类 线程安全的集合对象:Vector :是ArrayList的线程安全的实现HashTableS...

  • 线程安全集合

    早期线程安全的集合 我们先从早期的线程安全的集合说起,它们是Vector和HashTable VectorVect...

  • 「Java面试必会」谈谈并发包java .util.concur

    说到集合,就知道有的集合类并不是线程安全的,那Java中怎么保证集合是线程安全的? java .util.conc...

  • 并发总结(下)

    7.3.7 线程安全集合类概述 重点介绍 java.util.concurrent.* 下的线程安全集合类,可以发...

  • 十二、线程安全的集合

    十二、线程安全的集合 除了使用锁来保护共享数据结构,也可以直接使用一些实现了线程安全的对象 常见的线程安全集合 线...

  • 关于Java中的 CopyOnWriteArraySet

    最近做的课程设计中用到了Java线程安全的集合类,因此关于对Java线程安全集合类的理解做个简单记录。Java集合...

  • Vector与ArrayList,HashMap与HashTab

    开发中哪些地方遇到线程安全的: 集合有些是线程安全的有些是线程不安全的。 Vector与ArrayList 区别:...

网友评论

      本文标题:线程安全的集合

      本文链接:https://www.haomeiwen.com/subject/ynhcprtx.html