`

并发容器

阅读更多

   通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。

   并发容器ConcurrentHashMap

      替代同步基于散列的Map,通过Lock控制。

       原理锁分段,用new object[16]中每个元素作为一个锁,然后用synchronized(object[hash(key)%16])进行同步。

        ConcurrentMap接口中增加了一些常见的复合操作的支持。对ConcurrentHashMap进行迭代不会抛出异常(弱一致性)。size,isEnptry这些方法的语意被减弱了以反映容器的并发特性,还包括(get、put、containsKey、remove)

	public interface ConcurrentMap<K, V> extends Map<K, V> {
		//仅当key没有相应的映射值时才插入
	    V putIfAbsent(K key, V value);
	    //仅当key被映射到value时才被删除
	    boolean remove(Object key, Object value);
	    //仅当key被映射到oldvalue时才被替换为newvalue
	    boolean replace(K key, V oldValue, V newValue);
	    //仅当key被映射到某个值时才替换为value
	    V replace(K key, V value);
	}

 

并发队列(ConcurrentLinkedQueue)和阻塞队列(LinkedBlockingQueue)

  • ConcurrentLinkedQueue:是无阻塞的队列,可伸缩性比BlockingQueue高,采用CAS模式BlockingQueue(Lock)扩展了Queue 增加了可阻塞插入和获取等操作(Lock)。阻塞队列支持可阻塞的put和take,以及支持定时的offer和poll方法(如果数据不能添加到队列中,那么将返回一个失败的状态,这样就能灵活处理复合过载的情况,例如减轻负载,将多余的的工作项序列化写入磁盘,减少生产者线程数量)。其实现类LinkedBlockQueue和ArrayBlockingQueue是FIFO队列,二者与LinkedList和ArrayLsit相似,但比同步List拥有更好的并发性。PriorityBlockingQueue是一个按优先级排序的队列。

CopyOnWriteArrayList、CopyOnWriteArraySet(判断)、(Lock)

CopyOnWriteArraySet:底层就是CopyOnWriteArrayList,不过多了一步去重的工作

CopyOnWriteArrayList用在遍历操作为主要操作的情况下代替同步的List,紧当迭代操作远远多余修改操作时,才应使用“写入时复制”容器

    public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }

 

 并发的树形结构

  • ConcurrentSkipListMap替代同步的SortedMap采用CAS模式
  • ConcurrentSkipListSet替代同步的SortedSet采用CAS模式
分享到:
评论

相关推荐

    并发容器的原理,7大并发容器详解、及使用场景

    并发容器的出现解决了传统同步容器在性能上的不足,通过引入更先进的并发控制策略,如锁分段、CAS算法等,提升了程序的并发性和吞吐量。 首先,我们要理解什么是同步容器。Java 集合框架中的非线程安全容器,如 ...

    TBB并发容器 学习笔记

    TBB中的并发容器是其核心特性之一,它们是为了在多线程环境中安全有效地共享数据而设计的。这些容器包括: 1. `concurrent_queue`:这是一个线程安全的队列,允许在多个线程之间并发地进行入队和出队操作。它使用锁...

    Java从同步容器到并发容器的操作过程

    Java中的同步容器与并发容器是处理多线程环境下数据安全的重要工具。同步容器,如`Vector`和`HashTable`,通过在每个方法上添加`synchronized`关键字实现了线程安全,但这种方式存在性能瓶颈,因为每次操作都需要...

    java并发容器CopyOnWriteArrayList实现原理及源码分析

    Java并发容器CopyOnWriteArrayList实现原理及源码分析 Java并发容器CopyOnWriteArrayList是Java并发包中提供的一个并发容器,实现了线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现。...

    09、并发容器(Map、List、Set)实战及其原理

    本课程"09、并发容器(Map、List、Set)实战及其原理"深入探讨了如何在多线程环境下有效使用Map、List和Set这三种核心数据结构。下面我们将详细讲解这些并发容器的关键知识点。 1. **并发容器概述**: 在并发编程...

    JAVA并发容器代码随读1

    Java并发容器是Java多线程编程中的重要工具,它们提供了高效、线程安全的数据结构,使得在并发环境下处理数据变得更加简单。在`java.util.concurrent`包中,有四种主要的并发容器类型:队列(BlockingQueue)、Map...

    Java并发编程-并发容器1

    【Java并发编程-并发容器1】 在Java的并发编程中,容器的线程安全是至关重要的。HashMap在多线程环境下可能导致CPU利用率极高,因为它不是线程安全的。HashTable虽然提供了线程安全,但其同步机制导致并发性能较低。...

    笔记-5、并发容器1

    【笔记-5、并发容器1】 并发容器是Java并发编程中的关键组件,它们提供线程安全的数据存储和访问,使得多个线程可以同时操作而不会出现数据不一致的问题。本笔记将聚焦于Java中的并发容器,特别是ConcurrentHashMap...

    Java 常见并发容器总结

    Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...

    并发容器和线程池,java并发编程3

    ### 并发容器和线程池 #### 一、并发容器 ##### 1.1 概述 在Java中,为了提高程序的并发处理能力,Java标准库提供了多个线程安全的并发容器,它们主要位于`java.util.concurrent`包中。这些容器能够有效地管理...

    24 经典并发容器,多线程面试必备。—深入解析ConcurrentHashMap.pdf

    【并发容器】并发编程是Java开发中的重要领域,特别是在高并发场景下,高效且线程安全的数据结构至关重要。其中,`ConcurrentHashMap`是Java并发编程中常用的线程安全的哈希映射容器,它是`HashMap`的一个并发版本,...

    9、并发容器(Map、List、Set)实战及其原理.pdf

    根据提供的文档信息,本文将详细解析并发容器(Map、List、Set)的实战应用及其原理。并发容器在Java多线程环境下发挥着至关重要的作用,它们的设计旨在解决非线程安全容器在高并发场景下的性能瓶颈问题。接下来,...

    Java-并发容器之ConcurrentHashMap

    【Java并发容器之ConcurrentHashMap】是Java编程中用于高效并发操作的重要工具。相比于HashMap,ConcurrentHashMap在多线程环境下提供了线程安全的保证,避免了因扩容导致的CPU资源消耗过高问题。传统的线程安全解决...

    Java同步容器和并发容器详解

    Java同步容器和并发容器详解 Java同步容器和并发容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发。下面我们来一起学习Java同步容器和并发容器的知识点。 一、同步...

    并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

    "并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解" ArrayBlockingQueue和LinkedBlockingQueue是Java并发容器中两个常用的阻塞队列实现,分别基于数组和链表存储元素。它们都继承自AbstractQueue类...

    笔记-5、并发容器2

    【笔记-5、并发容器2】 预备知识: 在深入探讨并发容器ConcurrentHashMap之前,我们需要了解两个基础概念:Hash和位运算。 Hash是将任意长度的输入(也叫做预映射值或键)通过哈希函数转换成固定长度输出的过程。...

    Java并发编程与高并发解决方案之并发容器(J.U.C).docx

    ### Java并发编程与高并发解决方案之并发容器(J.U.C) #### 并发容器J.U.C 在Java中,为了提供高性能、低延迟的并发数据结构,Java提供了多种并发容器类,这些类主要位于`java.util.concurrent`包内,通常被称为J.U...

    25 经典并发容器,多线程面试必备—深入解析ConcurrentHashMap下.pdf

    在Java并发编程中,`ConcurrentHashMap`是一个重要的并发容器,它是`HashMap`的一个线程安全版本,适用于多线程环境。本节我们将深入解析`ConcurrentHashMap`的`put`和`get`方法,以及其初始化过程。 首先,`...

    14个Java并发容器,你用过几个?.docx

    以下是对标题和描述中提及的一些并发容器的详细解释: 1. **ConcurrentHashMap**: 是线程安全的HashMap实现,它在不同JVM版本中采用了不同的策略。在Java 7中,它使用分段锁,每个段是一个独立的HashMap,减少锁...

    并发容器——BlockingQueue相关类

    在Java编程中,`BlockingQueue`是一个非常重要的并发容器,它是Java并发包`java.util.concurrent`中的核心组件。`BlockingQueue`实现了一种线程安全的数据结构,它能够有效地协调生产者和消费者的动作,实现高效的...

Global site tag (gtag.js) - Google Analytics