并发编程(九)——集合相关面试问题

1、线程安全的集合(单列)怎么选择?

List、Set集合,线程安全的有哪些?

  • Vector,有,但是基本不考虑。(synchronized同步方法)
  • Collections.synchronizedList,也可以拿到线程安全的集合(synchronized同步代码块)
  • CopyOnWrite系列。(lock锁)

如果数据体量贼大,不考虑读的问题,还需要保证线程安全?

答:

  • 第一点,不能考虑CopyOnWrite。数据体量贼大,如果用CopyOnWrite会导致空间占用太多。
  • 第二点,如果不在业务代码上实现锁的话,基本职能选择Collections.synchronizedList。
  • 第三点,不采用JDK提供的线程安全的集合,自己通过代码,针对读写操作最针对性的加锁。
    • 可以在业务带上中,去完成读写锁的操作
    • 也可以仿照Collections.synchronizedList,直接做一个装饰者模式,套一层。

至于多列集合,不需要考虑了,上Concurrent系列。

2、CopyOnWrite集合需要注意的点?

CopyOnWrite在做写操作的时候,会复制一套副本,在副本中做各种操作,这样不会影响读线程去读取原

你可能感兴趣的:(并发编程,java)