【问题标题】:Java concurrent modification across threadsJava 跨线程并发修改
【发布时间】:2016-12-18 07:33:29
【问题描述】:

我有多个线程不断迭代一个名为“clients”的ArrayList

当他们断开连接时,我想从列表中删除单个客户端,但我知道这可能会导致并发修改异常。

我应该用Synchronized 块包围ArrayList 的所有用法还是不是一个好主意?

ArrayList 也可以被多个线程毫无问题地读取吗?

谢谢,

(客户端列表由向所有客户端发送数据的UDP线程不断迭代)

【问题讨论】:

  • CopyOnwrite arraylist 是一个很好的解决方案,但在您需要删除项目的情况下,您必须记住,从迭代器中删除元素是不可能的,您必须选择其他解决方案,例如: stackoverflow.com/questions/5612470/…

标签: java


【解决方案1】:

我可能没有完整的信息,但您似乎总是阅读并且只是偶尔写入(更改)到数组列表。在这种情况下,您可能应该考虑使用:

Copy On Write Array List implementation

它应该比使用常规同步更好,因为您不想在读取操作上获得同步。

Here 是一篇文章,解释了使用 CopyOnWriteArrayList 解决方案的更多正反两面。

【讨论】:

  • 这正是我想要的。我将 ArrayList 更改为写时复制数组列表。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
相关资源
最近更新 更多