通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器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大并发容器详解、及使用场景。有兴趣的可以看下。
TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_...
Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...
Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发...
主要为大家详细介绍了java并发容器CopyOnWriteArrayList实现原理及源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JAVA并发容器代码随读1
并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解
20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解 21.线程池ThreadPoolExecutor实现原理 22.线程池之ScheduledThreadPoolExecutor 23.FutureTask基本操作总结 24.Java中atomic包中的原子操作类...
Java并发编程与高并发解决方案之并发容器(J.U.C).docx
并发容器中Queue使用注意事项1
17丨并发容器的使用:识别不同场景下最优容器.html
09、并发容器(Map、List、Set)实战及其原理
6.JUC并发工具类在大厂的应用场景详解 (1).pdf 7、深入理解 AQS 独占锁之 Reentrantlock 源码分析 (1).pdf ...9、并发容器 (Map、List、Set) 实战及其原理.pdf 10、阻塞队列BlockingQueue 实战及其原理分析.pdf
不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不...上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻出来鼓捣一下。 仅做简单介绍,后续再分别深入探索。
主要介绍了Java同步容器和并发容器详解,容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,下面小编和大家来一起学习下吧
第一节 同步容器、并发容器 1.简述同步容器与并发容器 在Java并发编程中,经常听到同步容器、并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如...
主要介绍了Java多线程编程中的两种常用并发容器讲解,分别是ConcurrentHashMap与ConcurrentHashMap,需要的朋友可以参考下
下面小编就为大家带来一篇基于CopyOnWriteArrayList并发容器(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
(1)关键属性 (2)关键类 (3)CAS关键操作 (1)实例构造器方法 (2)initTable方法