内容:
队列很大一部分是为高并发做准备的
Vector,HashTable基本不用
Collections工具类可以把HashMap弄成带锁的
实际选择我们还是要进行压力测试
这些容器没有替代关系,要看实际情况
插入效率:
HashTable > HashMap > CurentHashMap
读效率:
HashTable < HashMap < CurentHashMap
多线程考虑容器的时候少考虑list,多考虑queue
CopyOnWriteArrayList:(用在读特别多写特别少的情况)
读的时候不加锁,写的时候把内部的数组复制一份,在复制的数组中写入数据,然后再把旧的引用指向复制的数组。
源码:
读不用加锁的原因就是新的前面的内容是和旧的一样的
BlockingQueue :阻塞队列
ConcurrentQueue:
LinkedBlockingQueue:(底层用LockSuppports)
put:如果满了线程会等待
take
ArrayBlockingqueue:
put:满了会等待
add:满了会报异常
offer:有返回值来判断加入成功没有,可以设置等待时间,在满了的时候等待几秒才返回结果
deleyQueue:按等待时间排序(用于按时间调度任务)
使用:
要求装入的东西实现Delayed接口
PriortyQueue: 优先队列
SynchronusQueue: 不是用来装东西的,是让一个线程给另一个线程下达任务的
TransferQueue:
transfer():线程把东西放着直到有人来取才继续干别的事