美文网首页
线程安全集合

线程安全集合

作者: 程序员札记 | 来源:发表于2022-04-25 08:47 被阅读0次

早期线程安全的集合

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

  1. Vector
    Vector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用
  2. HashTable
    HashTable和HashMap类似,不同点是HashTable是线程安全的,它给几乎所有public方法都加上了synchronized关键字,还有一个不同点是HashTable的K,V都不能是null,但HashMap可以,它现在也因为性能原因被弃用了。

Collections包装方法

Vector和HashTable被弃用后,它们被ArrayList和HashMap代替,但它们不是线程安全的,所以Collections工具类中提供了相应的包装方法把它们包装成线程安全的集合
List<E> synArrayList = Collections.synchronizedList(new ArrayList<E>());
Set<E> synHashSet = Collections.synchronizedSet(new HashSet<E>());
Map<K,V> synHashMap = Collections.synchronizedMap(new HashMap<K,V>());
每种集合都声明了一个线程安全的包装类,在原集合的基础上添加了锁对象,集合中的每个方法都通过这个锁对象实现同步

java.util.concurrent包中的集合

image.png

Pattern: Concurrent* Blocking* CopyonWrite*

  • CopyOnWrite 是读写分离
  • Concurrent是 保护线程安全的, 但是拿不到数据,放不进去 也允许。
  • Blocking是为producer consumer 设计的,一定要拿到或者放入数据。 拿不到,或者没东西放就阻塞等待。除非调用端放弃。

从下面开始就要开始介绍线程安全结合了。这也是并发编程的最后一章。

相关文章

  • 集合的线程安全

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

  • 常用集合及源码解读

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

  • ConcurrentHashMap源码设计分析

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

  • Java 集合

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

  • 并发总结(下)

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

  • 线程安全集合

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

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

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

  • 十二、线程安全的集合

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

  • 关于Java中的 CopyOnWriteArraySet

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

  • BlockingCollection 源码分析(一)

    BlockingCollection是一个线程安全的生产者-消费者集合。 为线程安全集合提供阻塞和绑定功能,允许多...

网友评论

      本文标题:线程安全集合

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