JAVA并发包

一 Java提供并发包整体API图

来自:http://www.blogjava.net/xylz/archive/2010/06/30/324915.html
JAVA并发包_第1张图片
一、描述线程的类: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()方法)

你可能感兴趣的:(Java基础)