同步类容器
同步类容器都是线程安全的
同步类容器包括 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队列
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。