同步类容器前端
同步类容器都是线程安全的后端
同步类容器包括 Vector HashTable 。
这些容器的同步方法都是使用JDK的 Collections.synchronizedCollection,synchronizedMap,synchronizedList等工厂方法去建立实现的。其底层的机制就是对于使用synchronized关键字对于每个公用的方法进行同步。数组
并发类容器
是专门为并发而设计的
使用ConcurrentHashMap来替代 hashTable
使用CopyOnWriteArrayList来替代Vector
以及并发的CopyOnWriteArraySet
ConcurrentLinkedQueue 高性能的队列
LinkedBlockingQueue 阻塞形式的队列缓存
ConrrentHashMap安全
concurrentMap 接口有2个实现类 CorrentSkipListMap(支持排序),ConcurrentHashMap并发
底层原理 把一个总体分为16个段 每个段就是一个hashtable 经过减少锁的粒度俩较少锁竞争的问题高并发
ConcurrentHashMap<String, Object> c= new ConcurrentHashMap<String, Object>();
CopyOnWrite
包含2个类CopyOnWriteArrayList CopyOnWriteArraySet 性能
CopyOnWrite是写时复制的容器 当往容器添加元素的时候 是先copy一份 然佛操做新的数据 最后指向该数据线程
CopyOnWriteArrayList<String> cwal = new CopyOnWriteArrayList<String>(); CopyOnWriteArraySet<String> cwas = new CopyOnWriteArraySet<String>();
并发Queue
以ConcurrentLinkedQueue 为表明的高性能的队列
以BlockingQueue为接口为表明的阻塞队列设计
ConcurrentLinkedQueue 高性能无阻塞无界队列
是一个适用于高并发场景下的队列 经过无锁的方式 实现了并发状态下的高性能
ConcurrentLinkedQueue<String> q = new ConcurrentLinkedQueue<String>(); q.offer("a");//添加 q.add("e");//添加 q.poll("a");//一处头元素 并删除 q.peel("a");//只移除不删除
BlockingQueue接口
ArrayBlockingQueue 是基于数组的阻塞队列实现 在ArrayBlockingQueue 内部 维护了一个定长数据一遍缓存队列中的数据对象。内部没有实现读写分离 也叫有界队列
ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);
LinkedBlockingQueue 是基于链表的阻塞队列内部维护者一个缓冲队列了 其内部采用了分离锁 实现了读写2个锁 读写分离 是无界队列
LinkedBlockingDeque<String> dq = new LinkedBlockingDeque<String>(10); dq.addFirst("a"); System.out.println("查看头元素:" + dq.peekFirst());
synchronousQueue 无缓冲队列
PriorityBlockingQueue 是基于优先级的阻塞队列 使用了公平锁 是无界队列
PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>(); //Task类 须要实现Comparable接口 而后重写CompareTo()方法
DelayQueue 带有延迟时间的Queue
public class Wangmin implements Delayed{ } public class WangBa implements Runnable { private DelayQueue<Wangmin> queue = new DelayQueue<Wangmin>(); }
Deque 双端队列
LinkedBlockingDqueue是线程安全的双端队列的实现。在内部维护了前端和后端节点,没有实现读写分离,效率要低于其余Blocking队列