1、线程安全的集合(单列)怎么选择?
List、Set集合,线程安全的有哪些?
- Vector,有,但是基本不考虑。(synchronized同步方法)
- Collections.synchronizedList,也可以拿到线程安全的集合(synchronized同步代码块)
- CopyOnWrite系列。(lock锁)
如果数据体量贼大,不考虑读的问题,还需要保证线程安全?
答:
- 第一点,不能考虑CopyOnWrite。数据体量贼大,如果用CopyOnWrite会导致空间占用太多。
- 第二点,如果不在业务代码上实现锁的话,基本职能选择Collections.synchronizedList。
- 第三点,不采用JDK提供的线程安全的集合,自己通过代码,针对读写操作最针对性的加锁。
- 可以在业务带上中,去完成读写锁的操作
- 也可以仿照Collections.synchronizedList,直接做一个装饰者模式,套一层。
至于多列集合,不需要考虑了,上Concurrent系列。
2、CopyOnWrite集合需要注意的点?
CopyOnWrite在做写操作的时候,会复制一套副本,在副本中做各种操作,这样不会影响读线程去读取原