Java学习总结(1.3.3) 并发容器类2

精贴 置顶
1523 0
作者:      发布时间: 2020-04-09 11:45:37

并发容器类list_set_queue


ConcurrentSkipListMap

以空间换时间,提高查找效率。

key是有序的

concurrent线程安全的,适合在是发场量下用。

TreeMap线程不安全


List:

CopyOnWriteArrayList容器即写时复制的容器。和 ArrayList比较,优点是并发安全,缺点有两个

1、多了内存占用:写数据是copy一份完整的数据,单独进行操作。占用双份内存。

2、数据一致性:数据写完之后,其他线程不一定是马上读取到最新内容。



ArrayList 使用的数组来做存储

数组是定长的,ArrayList怎么实现一个不定长的?

add方法中,用扩容的方式实现。

第一次为10,每次扩容为原来的1.5倍。



Copywrite思想

互斥锁并发度很低句话概括读写锁的作用:提高互斥锁的性能

存在一个问题:

1.读很多的时候,写容易被饿死

2.假如拿到写锁?大量的读就被阻塞,不希望看到这样的情况


怎么解决这个问题呢?

Copywrite:

copyOnWrite在我写时,仍然可以读并且读到的不是脏数据

问题:数据存在一定的延时每次写,都复制,浪费资源吗?

会,以空间换时间大量的读,非常少量的写

只要是写:导致内存你的翻倍,很容易OOM


===========================

Hashset  基于Hashmap实现    非线程安全

CopyOnWriteArraySet  基于CopyOnWriteArrayList  线程安全

ConcurrentSkipListSet  基于ConcurrentSkipListMap  线程安全,有序,查询快



set 实际上是数学概念

集合:无序的、不重复

有序可以看做无序的特殊情况


Hashset数据到底有没有顺序实现的时候, 没有刻意打乱顺讯, 也没有可以保证顺序, 顺序没有保障.


Set集合

Set和List重要区别: 不重复


Hashset使用 Hashmap实现的,怎么实现的呢?

Hasmmap key不重复, Hashset元素不重复


CopyOnWriteArraySet   Set不能重复

CopyOnWriteArrayList  List可以重复

顺序不用关心,


============================================

Queue API

Queue-队列数据结构的实现。分为阻塞队列和非阻塞队列。下列的蓝色区块,为阻塞队列特有方法。



方法作用描述
add增加一个元素如果队列已满,则抛出一个 Illegal Slabeepeplian异常
remove移除并返回队列头部的元素如果队列为空,则抛出一个 Nosuchelementexception异常
element返回队列头部的元素如果队列为空,则抛出一个 Nosuchelementexception异常
offer添加一个元素并返回true如果队列已满,则返回 False
poll移除并返问队列头部的元素如果队列为空,则返回null
peek返回队列头部的元素如果队列为空,则返回null
put添加一个元素如果队列满,则阻塞
take移除并返回队列头部的元素如果队列为空,则阻塞

-------------------------------------------

ArrayBlockingQueue

线程安全, 阻塞。

从名称可以判断数据结构: Array数组。

如何用数组实现一个 queue: 循环数组来实现一个 queue, 类似Contion。

什么是阻塞,contion线程挡土挂起。


LinkedBlocingQueue 链表



ConcurrentLinkedQueue  

在并发场景下使用,线程安全, 无阻塞。

CAS 无锁编程。

CAS不能够保障性能绝对的好,可以保障我一个程序把资源占有的更多,单个程序性能一定更好。



SychronousQueue

同步队列,容量为0

put没有容量了,阻塞,当有poll、take取元素时。结束阻塞。

offer 元素直接丢掉。
如果有take阻塞中, offer也会成功


take阻塞,当有put、ofer方法结束阻塞poll直接返回null

如果有一个put方法阻塞着,poll不返回null


PriorityBlockingQueue

打破了先进先出的规则,优先级列中有也优先级规则。

优先级可以理解为排序,排序则,指定优先级







标签:

每日一句

如果花了足够多的时间考虑你的目标,你就能用自己的心看到、摸到、尝到和闻到那个目标,你不会轻易放弃。实现目标的欲望会给你足够的毅力克服哪怕是最令人生畏的障碍。在真的取得成功之前,你应该已经在头脑中达成目标。这样你就能承受任何暂时的痛苦,实现自己的梦想。

标签云

vue
最近综合
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
为什么无知者越自信? -- 达克效应 05.10
马斯洛需求层次理论 04.29
随机综合
普通蛋糕做法 05.31
中间件1.2.1-ActiveMQ入门 04.22
Zebra斑马 888-TT打印机的EPL命令的详细说明 08.31
鸿蒙HarmonyOS DevEco Studio的安装教程 和 第一个项目 04.15
Java学习总结(1.3.3) 并发容器类2 04.09
android TextView标签字体加粗的几种方法 04.08
Java学习总结(2.2.2) 责任链模式 04.20
Java学习总结(1.3.2) 并发容器类 04.07