一、Map
1. HashTable
线程安全的Map,用synchronized锁
2. Collections.synchronizedMap
Collections.synchronizedMap(new HashMap()) 可以把HashMap变成线程安全的,锁粒度比HashTable稍微小一点
3. ConcurrentHashMap
ConcurrentHashMap主要提高的是读的效率,数据量较多时,写效率没有HashTable高
无序:HashMap =》ConcurrentHashMap
有序(按大小排序):TreeMap =》ConcurrentSkipListMap
二、List
CopyOnWriteArrayList:写时复制,读的时候不加锁,写的时候加锁,复制原来的List,并添加新元素
CopyOnWriteSet
三、Queue:
多线程的情况下,多考虑Queue,少考虑List
1. 基本用法
offer方法是添加数据的,有一个boolean的返回值;
add方法也是添加数据的,没有返回值,添加不进去会抛异常
peek:取数据,并不会remove
poll:取数据,并remove队列中的,原子性是通过CAS实现的
2. BlockingQueue
put:添加数据,如果数据满了,会阻塞等待
take:取数据,如果数据为空了,会阻塞等待
LinkedBlockQueue:最大长度是int的最大值
3. DelayQueue
DelayQueue:按照delayTime排序,时间越短,越靠前
4. PriorityQueue
PriorityQueue:值按顺序排列
5. SynchronousQueue
SynchronousQueue:容量为0,需要有其他线程等待取值,才能put进去值,用于两个线程交换数据
6. LinkedTransferQueue
LinkedTransferQueue:transfer方法,等待其他线程往队列里面放值,等到该值被取走后继续运行