跨线程的Java并发修改

时间:2016-12-18 07:33:30

标签: java

我有多个线程不断迭代ArrayList被称为"客户端"。

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

我是否应该将ArrayList的{​​{1}}所有用法包围起来,或者这不是一个好主意?

多个线程也可以没有问题地读取Synchronized吗?

谢谢,

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

1 个答案:

答案 0 :(得分:2)

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

Copy On Write Array List implementation

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

Here是一篇文章,解释了使用CopyOnWriteArrayList解决方案的更多原则和方法。