java - 迭代时向 HashSet 添加元素
问题描述
所以我的程序是paint的一个版本。
它创建了一个画布,并允许我用鼠标在画布上绘画,方法是Point
使用 ' 从鼠标中获取 'HashSet
和Iterator
。
它还通过 a 连接到另一个相同的程序DatagramSocket
,并将Point
它生成的 's 发送到另一个程序,该程序在它的画布上显示它。
为此,我使用一个Runnable
线程来侦听传入Point
的 's 并将它们添加到HashSet
.
我的问题是我得到了java.util.ConcurrentModificationException
,因为我在绘画时通过线程将Point
's 添加到HashSet
连接的程序中。
我不知道如何解决这个异常,因为我希望画布能够实时更新。
CopyOnWriteArraySet
使用我可以简单地替换我的HashSet
:)解决了这个问题,感谢您的所有支持!
解决方案
使用ConcurrentSkipListSet而不是HashSet。这个 Set 实现是有序且线程安全的。
正如MikeFHay 所提到的,您还可以使用另一个线程安全的Set 实现 - ConcurrentHashMap.KeySetView。它可以通过使用ConcurrentHashMap.newKeySet()方法来实例化。此 Set比ConcurrentSkipListSet更快,并且没有排序。
推荐阅读
- swift - Swift:Swift doc github 文档工具 - 无法找到正确的路径
- docx - TypeError:参数“元素”的类型不正确(预期为 lxml.etree._Element,得到无类型)
- sql - 计算测量结果的 SSAS 强制聚合
- networking - GNU-Make:以 ssh 作为外壳的远程命令?
- database - 数据建模:员工及其技能
- pandas - 根据 2 个数据帧 (df1, df2) 之间的匹配列更新一个 DF (df1) 的行
- javascript - 如何隐藏加载jquery的下拉菜单
- node.js - Puppeteer nodejs 关闭页面
- node.js - 为什么 nodejs 可能找不到“require”?
- json - Ansible 从文件中获取类似字典的值到剧本或循环