博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步容器和并发容器
阅读量:5260 次
发布时间:2019-06-14

本文共 1412 字,大约阅读时间需要 4 分钟。

同步类容器

 

并发类容器

 

ConcurrentMap

Copy-on-write

 

并发List Vector和CopyOnWriteArrayList是两个线程安全的List,Vector读写操作都用了同步,相对来说更适用于写多读少的场合,CopyOnWriteArrayList在写的时候会复制一个副本,对副本写,写完用副本替换原值,读的时候不需要同步,适用于写少读多的场合。

并发Set CopyOnWriteArraySet基于CopyOnWriteArrayList来实现的,只是在不允许存在重复的对象这个特性上遍历处理了一下。

并发Map ConcurrentHashMap是专用于高并发的Map实现,内部实现进行了锁分离,get操作是无锁的。

并发的Queue 在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列。ConcurrentLinkedQueue适用于高并发场景下的队列,通过无锁的方式实现,通常ConcurrentLinkedQueue的性能要优于BlockingQueue。BlockingQueue的典型应用场景是生产者-消费者模式中,如果生产快于消费,生产队列装满时会阻塞,等待消费。

并发的Dueue Queue是一种双端队列,它允许在队列的头部和尾部进行出队和入队的操作。Dueue实现类有非线程安全的LinkedList、ArrayDueue和线程安全的LinkedBlockingDueue。LinkedBlockingDueue没有进行读写锁的分离,因此同一时间只能有一个线程对其操作,因此在高并发应用中,它的性能要远远低于LinkedBlockingQueue,更低于ConcurrentLinkedQueue。

并发锁重入锁ReentrantLock ReentrantLock是一种互斥锁的实现,就是一次最多只能一个线程拿到锁;

读写锁ReadWriteLock 读写锁有读取和写入两种锁,读取锁允许多个读取的线程同时持有,而写入锁只能有一个线程持有。

条件Condition 调用Condition对象的相关方法,可以方便的挂起和唤醒线程。

 

queue和deque的区别

队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高 

相关常用方法: 
boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。 
E poll():从队首删除并返回该元素。 
E peek():返回队首元素,但是不删除 

双向队列(Deque),是Queue的一个子接口,双向队列是指该队列两端的元素既能入队(offer)也能出队(poll),如果将Deque限制为只能从一端入队和出队,则可实现栈的数据结构。对于栈而言,有入栈(push)和出栈(pop),遵循先进后出原则

常用方法如下: 

void push(E e):将给定元素”压入”栈中。存入的元素会在栈首。即:栈的第一个元素 
E pop():将栈首元素删除并返回。 

转载于:https://www.cnblogs.com/duan2/p/7769041.html

你可能感兴趣的文章
Webpack 多html入口、devServer、热更新配置
查看>>
mongoDB(1)
查看>>
26岁,你看着身边的人都结了婚
查看>>
NumPy
查看>>
Tips on C/C++
查看>>
BZOJ.5417.[NOI2018]你的名字(后缀自动机 线段树合并)
查看>>
BZOJ.4320.[ShangHai2006]Homework(根号分治 分块)
查看>>
css3实现圆环进度条
查看>>
Linux Shell函数定义与调用
查看>>
spark streaming方法
查看>>
随机生成想要的字符串位数
查看>>
Vue: ----父子组件的交流(互相传值和访问)
查看>>
封装原生ajax
查看>>
C#单链表的练习
查看>>
node--20 moogose demo2
查看>>
Spring Boot 学习(2)
查看>>
KeepAlive详解
查看>>
字符串处理
查看>>
python爬虫之路——使用逆行工程抓取异步加载网页数据
查看>>
c/c++ 贪吃蛇控制台版
查看>>