【问题标题】:Reading ArrayList in Concurrent system在并发系统中读取 ArrayList
【发布时间】:2012-10-29 20:58:57
【问题描述】:

我有一个简单的ArrayList,我通过 Java 并发从多个Threads 中提供这个ArrayList。每个Thread 只会读取这个ArrayList 的同一个实例。读取操作有没有出错的可能?

【问题讨论】:

  • 如果数组列表没有改变,我想不出任何原因会出现问题,因为所有线程都在访问列表和读取。
  • 所以你有多个线程同时写入列表?他们也在从列表中阅读,或者您的读者都在不同的线程中?
  • @Perception 该列表在并发启动之前已完全填充,因此线程仅在读取它。
  • 感谢您的澄清。在这种情况下不,你不应该有任何错误从多个线程读取列表。

标签: java list concurrency arraylist


【解决方案1】:

如果列表已完全填充并且所有线程始终以只读方式访问,则不会有问题。如果有写操作,则需要同步所有对列表的访问,或者使用并发列表(如CopyOnWriteArrayList)。

【讨论】:

    【解决方案2】:

    如果不再有写入,则使用 Collections.unmodifiableList 使其不可变,然后忘记读取问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 2018-03-25
      • 2013-12-06
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多