List
Vector
并发安全的集合,方式使用synchronized
修饰
SynchronizedList
使用Collections.synchronizedList()
方法创建的集合
ConcurrentLinkedDeque
并发安全的队列,使用poll()
方法读取并删除头部元素,读到null
时即为读完了
CopyOnWriteArrayList
写的时候加锁,并赋值原有数组,同时扩展一个长度,放置新的元素,读的时候不加锁,读到的是未添加进来的老的数据
读操作非常多时可用
Map
HashTable
SynchronizedHashMap
并发安全的map,对方法内的代码块加synchronized
锁
写的效率高于读的效率
ConcurrentSkipMap
并发安全的有序map,使用跳跃表作为数据结构
ConcurrentHashMap
并发安全的无序的map
读的效率高于写的效率,写的判断逻辑复杂
TreeMap
有序的map与LinkedHashMap
不同的是treeMap
用的是红黑树,LinkedHashMap
用的是链表和hashMap
Queue
boolean offer(E e)
添加元素,添加不成功返回false
peek()
取出元素不会remove数据
poll()
取出数据并且会remove数据
BlockingQueue
put()
存数据,如果队列已满会阻塞线程直到数据被take取出
take()
取出数据,没有数据会阻塞线程一直等待,直到数据被put进去
LinkedBlockingQueue
用链表实现的BlockingQueue
,无界队列,有内存就能放
ArrayBlockingQueue
底层使用数组实现,属于有界队列,在队列已满的时候
add
方法添加元素会抛出异常
offer
方法添加元素不会报异常,会返回false
,可指定添加时间
DelayQueue
根据等待时间排序,等待越短的会优先被取出,使用PriorityQueue
实现
SynchronousQueue
容量为0,用来做任务下发(类似于Exchanger
)
不能使用add()
添加数据
使用put()
添加数据
TransferQueue
新增了transfer()
方法,添加完数据库等待数据被消费
LinkedTransferQueue
PriorityQueue
有序的队列,值越小越靠前,底层数据结构是二叉树
ConcurrentLinkedDeque
并发安全的队列,使用poll()
方法读取并删除头部元素,读到null
时即为读完了