如何将非线程安全的容器变成线程安全的容器?
用synchronized修饰非线程安全的方法即可,但是串行化程度太高
1.5之后为了解决加锁带来串行化
CopyOnWriteArrayList
读快照
写副本
只有最终一致性
合并快照的方法是setArray,在add或者set等中调用
底层数组使用volatitle修饰,保证可见性。
ConcurrentHashMap 和 ConcurrentSkipListMap
主要区别在于 ConcurrentHashMap 的 key 是无序的,而 ConcurrentSkipListMap 的 key 是有序的
linkedHashMap 也是有序的, 因为是双向链表所以有序。
CopyOnWriteArraySet 和 ConcurrentSkipListSet
使用场景可以参考前面讲述的 CopyOnWriteArrayList 和 ConcurrentSkipListMap,它们的原理都是一样的
Queue
阻塞与非阻塞,所谓阻塞指的是当队列已满时,入队操作阻塞;当队列已空时,出队操作阻塞。
单段 ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、LinkedTransferQueue、PriorityBlockingQueue 和 DelayQueue。