**
一:对于Map/Set
**
不需要并发时:
HashMap:一般就用这个
TreeMap:需要排序时,使用这个
LinkedhashMap:有序的Map
上述三个Map都不是线程安全的,因此在高并发的时候不推荐使用。Set同理,只需要将Map换为Set即可。
并发不是很大时:
Hashtable:早期的线程安全Map。速度较慢,高并发下不推荐使用。
Collections.sychronizedXxx:将不安全的容器包装成安全的容器后返回,返回的容器则为安全的容器。
高并发时:
ConcurrentHashMap:线程安全Map,用来替代HashMap。采用粒度更细的加锁机制:分段锁,因此高并发下可以实现更高的吞吐量,单线程下也只会损失很小的性能。
ConcurrentSkipListMap :线程安全Map,且为有序的Map,用于替代SortedMap,支持高并发。Set只需将Map换为Set即可。
二:对于队列
不需要并发时:
ArrayList:最常用
LinkedList:支持队列操作
并发不是很大时:
vector:早期的线程安全容器,速度较慢,高并发下不推荐使用。
Collections.sychronizedXxx:将不安全的容器包装成安全的容器后返回,返回的容器则为安全的容器。
高并发时:
CopyOnWriteList:避免了高并发下的脏读现象,写入速度贼慢,读取速度快,因此适用于读多写少的情况。
Queue:分为以下三种
1:concurrentArrayQueue//CocurrentLinkedQueue
没啥特殊的,就是支持高并发而已。
2:BlockingQueue:阻塞队列
ArrayBlockingQueue:有界的阻塞队列
LinkedBlockingQueue:无界的阻塞队列
TransferQueue:直接交给消费者线程执行,不放在缓冲区,没有消费者时会阻塞
SynchronusQueue:容量为0的队列
3:DelayQueue 执行定时任务
总结自马老师的java高并发公开课,如有错误的地方,欢迎指出纠正。