集合
- 集合关系图(展示基本情况)
- List
- ArrayList如何保证线程安全?
- 修改为使用Vector, 性能会下降
- 使用Collections.synchronizedCollection()
- 直接加锁
- ArrayList与Vector的区别;前者线程不安全,扩容为1.5倍;后者线程安全,扩容为2倍
- Vector是方法级别的锁,而synchronizedCollection是变量级别的锁,一般使用后者,性能会强于Vector
- LinkedList如何保证线程安全?
- 使用Collections.synchronizedList();
- Collections方法本质上是对基础对象的增强,属于设计模式中装饰者模式的使用
对象名称 | 具体实现 | 线程是否安全 |
ArrayList | 动态数组,随机访问 | 不安全 |
LinkedList | 双向链表 | 不安全 |
Vector | 动态数组 | 安全 |
- Set
- 如何保证线程安全:
- Collections.synchronizedSet()
对象名称 | 具体实现 | 线程是否安全 | 是否有序 |
TreeSet | 基于Map | 不安全 | 有 |
HashSet | 基于HashMap | 不安全 | 无 |
LinkedHashSet | 双向链表 | 不安全 | 有 |
- Queue
对象名称 | 具体实现 | 线程是否安全 |
LinkedList | 基于链表 | 不安全 |
PriorityQueue | 基于堆 | 不安全 |