有序列表和类线程安全

Shr*_*ari 6 java multithreading java.util.concurrent

我有一个课程:

  • 2个字段包含按时间排序的列表(list1,list2).
  • 3个只读方法,它们迭代上面的列表以生成汇总统计信息.
  • 1个变异方法,它在list1中查找给定'new-item'的匹配项.如果未找到匹配项,则会将"new-item"添加到list1.如果找到匹配,则从list1中删除匹配,并将match和'new-item'添加到list2.

让我们假设所有方法的多个并发调用是可能的.我需要在最大化性能的同时实现线程安全.

Approach1(极慢) - 将字段类型声明为ArrayList并在所有方法上使用synchronize关键字.

Approach2 - 将字段类型声明为CopyOnWriteArrayList并同步变异方法.

问题

  1. Approach2是否确保线程安全?
  2. 还有更好的选择吗?

Pet*_*rey 1

锁定方法所需的时间不到一微秒。如果一微秒很重要,您可能会考虑更复杂的东西,否则简单的东西通常会更好。

当您执行多个操作时,仅使用线程安全集合是不够的,例如,从一个列表中删除并添加到另一个列表是两个操作,并且任意数量的线程可以进入这些操作之间。

注意:如果您进行大量更新,这可能会更慢。