JUC-集合

简介: JUC-集合

JUC对于集合的支持

  • CopyOnWriteArrayList
  • ArrayList线程安全的变体
  • 基于ReentrantLock可重入锁、数组复制保证线程安全
  • 不会引发ConcurrentModificationException
  • 不支持迭代器,会抛出UnsupportedOperationException
  • 部分代码如下

public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        //注意这里,基于ReentrantLock
        lock.lock();
        try {
            Object[] elements = getArray();
            int len = elements.length;
            //数字copy
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }
  • • ConcurrentLinkedQueue
  • 无界线程安全队列
  • 基于CAS保证线程安全
public boolean offer(E e) {
        checkNotNull(e);
        final Node<E> newNode = new Node<E>(e);
        for (Node<E> t = tail, p = t;;) {
            Node<E> q = p.next;
            if (q == null) {
                //注意这里,通过CAS新增节点
                if (p.casNext(null, newNode)) {
                    if (p != t) // hop two nodes at a time
                        casTail(t, newNode);  // Failure is OK.
                    return true;
                }
            }
            else if (p == q)
                p = (t != (t = tail)) ? t : head;
            else
                p = (p != t && t != (t = tail)) ? t : q;
        }
    }
  • ConcurrentHashMap
  • HashMap的线程安全变体
  • 基于CAS、synchronized(局部锁,不是全局锁)保证线程安全
目录
相关文章
|
6月前
|
安全 算法 Java
剑指JUC原理-19.线程安全集合(上)
剑指JUC原理-19.线程安全集合
51 0
|
6月前
|
安全 Java API
JavaEE初阶 CAS,JUC的一些简单理解,包含concurrent, ReentrantLock,Semaphore以及ConcurrentHashMap
JavaEE初阶 CAS,JUC的一些简单理解,包含concurrent, ReentrantLock,Semaphore以及ConcurrentHashMap
48 0
|
2月前
|
存储 安全 算法
JUC集合: ConcurrentLinkedQueue详解
与此同时,它的无界特性在使用时需要注意,因为过多的数据累积可能会导致内存消耗过大。合理应用 `ConcurrentLinkedQueue` 不仅可以提升应用性能,还能提高程序在并发环境下的可靠性。在实际的开发过程中,合理选择适当的并发容器对于构建高效稳定的系统至关重要。
45 2
|
3月前
|
存储 算法 Java
Java 中的同步集合和并发集合
【8月更文挑战第22天】
44 5
|
6月前
|
编解码 安全 算法
Java多线程基础-18:线程安全的集合类与ConcurrentHashMap
如果这些单线程中的集合类确实需要在多线程中使用,该怎么办呢?思路有两个: 最直接的方式:使用锁,手动保证。如多个线程修改ArrayList对象,此时就可能有问题,就可以给修改操作进行加锁。但手动加锁的方式并不是很方便,因此标准库还提供了一些线程安全的集合类。
98 4
|
存储 安全 算法
一天一个 JUC 工具类 -- 并发集合
使用JUC工具包中的并发集合,我们可以避免手动处理锁和同步的复杂性,从而降低出现线程安全问题的概率。这些并发集合通过内部采用高效的算法和数据结构来优化并发操作,从而提供更好的性能和扩展性。
|
6月前
|
存储 安全 算法
java多线程之并发容器集合
java多线程之并发容器集合
|
安全 Java API
Java并发集合
传统类集框架的弊端 1.并发集合的类型 2.并发单值集合 3.并发多值集合 4.跳表集合
55 0
|
6月前
|
安全 Java 数据库
剑指JUC原理-19.线程安全集合(下)
剑指JUC原理-19.线程安全集合
52 0
|
安全 Java 容器
集合的线程安全解读
集合的线程安全解读
集合的线程安全解读