我有多个线程不断迭代一个名为“clients”的ArrayList
。
当他们断开连接时,我想从列表中删除单个客户端,但我知道这可能会导致并发修改异常。
我应该用 Synchronized
block 包围 ArrayList
的所有使用吗?
另外,ArrayList
可以被多个线程读取而没有问题吗?
谢谢
(客户端列表由向所有客户端发送数据的 UDP 线程不断迭代)
最佳答案
我可能没有完整的信息,但似乎您总是读取数组列表,只是有时写入(更改)数组列表。在这种情况下,您可能应该考虑使用:
Copy On Write Array List implementation
它应该比使用常规同步更好,因为您不想在读取操作上同步。
Here这篇文章解释了使用 CopyOnWriteArrayList 解决方案的更多优点和缺点。
关于Java跨线程并发修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206348/