JAVA并发包

我就是我 2022-11-27 06:48 290阅读 0赞

一 Java提供并发包整体API图

来自:http://www.blogjava.net/xylz/archive/2010/06/30/324915.html
在这里插入图片描述
一、描述线程的类:Runable和Thread都属于java.lang包
二、内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/notifyAll()属于java.lang包
二、提供内存可见性和防止指令重排的volatile属于jvm关键字

java.util.concurrent 并发包目录下的包是并发编程的工具类
1、locks部分:包含在java.util.concurrent.locks包中,提供显式锁(互斥锁和速写锁)相关功能;

2、atomic部分:包含在java.util.concurrent.atomic包中,提供原子变量类相关的功能,是构建非阻塞算法的基础;

3、executor部分:散落在java.util.concurrent包中,提供线程池相关的功能;

4、collections部分:散落在java.util.concurrent包中,提供并发容器相关功能;

5、tools部分:散落在java.util.concurrent包中,提供同步工具类,如信号量、闭锁、栅栏等功能;

collection部分
非阻塞队列(队列无数据,操作队列产生异常或返回null,不具备等待/阻塞的特色)
ConcurrentHashMap:相对于线程安全的HashTable,优势在于HashTable不支持在循环(iterator)中对结构调整(增、删),否则会有ConcurrentModificationException异常。采用了分段锁的设计, 将一个HashMap分成N段,使用key的hashCode来确定分配到那个字段,只有在同一分段内才存在竞态关系,每个分段相当于一个HashTable,执行效率相当于提升了N倍。

ConcurrentSkipListMap:支持排序。

ConcurrentSkipListSet:支持排序且不允许重复元素
ConcurrentLinkedQueue:队列操作(只操作队头),poll() / peek() / element()

ConcurrentLinkedDeque:双端队列(支持操作队头和队尾),pollFirst() / pollLast()

CopyOnWriteArrayList:适用于读操作>>写操作的情况。在写时拷贝,也就是如果需要对CopyOnWriteArrayList的内容进行改变,首先会拷贝一份新的List并且在新的List上进行修改,最后将原List的引用指向新的List。线程安全地遍历,因为如果另外一个线程在遍历的时候修改List的话,实际上会拷贝出一个新的List上修改,而不影响当前正在被遍历的List。ArrayList非线程安全

CopyOnWriteArraySet:HashSet非线程安全

阻塞队列(取空队列需要等待直到有元素,塞满队列需要等待直到有空间)
ArrayBlockingQueue:有界阻塞队列

LinkedBlockingQueue:无界阻塞队列,基于单向链表的实现

PriorityBlockingQueue:无界有序的阻塞队列,基于数组

SynchronousQueue:同步队列,插入需等待移除,移除需等待插入

DelayQueue:延时执行任务的队列,集合元素需实现java.util.concurrent.Delayed接口

LinkedTransferQueue:与SynchronousQueue功能类似,但有嗅探功能,能尝试性的添加数据(tryTransfer()方法)

https://blog.csdn.net/paldosfan/article/details/84180158

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java发包

    Java线程:新特征-线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线

    相关 concurrent 发包

    java.util.concurrent并发包提供了很多处理多线程的接口和类,主要包括: 1. 用于线程同步的Lock锁接口。 2. 用于线程通信的Condition条件

    相关 Java发包系列开篇

    在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能。一直以来都想写一个Java并发