Java跨线程并发修改

标签 java

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

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

我应该用 Synchronized block 包围 ArrayList 的所有使用吗?

另外,ArrayList 可以被多个线程读取而没有问题吗?

谢谢

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

最佳答案

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

Copy On Write Array List implementation

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

Here这篇文章解释了使用 CopyOnWriteArrayList 解决方案的更多优点和缺点。

关于Java跨线程并发修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206348/

相关文章:

java - Firebase 身份验证为 getCurrentUser() 返回 NULL

java - Java注解ElementType常量是什么意思?

java - CrudRepository 使用不正确的表/模式来选择实体

java - 使用 AES PKCS7Padding 加密和解密失败

java - 为什么在发送之前将 String 转换为字节数组?

java - 发送 QUIT 信号时不会调用 addshutdownHook

java - 如何在java中获取unicode的字符长度以及空格

java - 在java中,Enumeration<?>是什么意思?

java - JDBC:多列 IN 查询

java - 在给定的 Java 代码中,name() 方法将返回什么?