迭代[重复]时将元素添加到HashSet >>

问题描述 投票:0回答:2

它创建了一个画布,并允许我通过使用PointHashSet从鼠标获取Iterator来用鼠标在画布上绘画。

它还通过DatagramSocket连接到另一个相同的程序,并将它生成的Point发送到另一个程序,该程序在画布上显示该程序。

为此,我使用Runnable线程侦听传入的Point,并将它们添加到HashSet

我的问题是我得到了java.util.ConcurrentModificationException,因为我在绘画时通过线程从连接的程序中将Point添加到了HashSet中。

我看不到该异常的解决方法,因为我想实时更新画布。


使用CopyOnWriteArraySet解决了这个问题,我可以用它简单地替换我的HashSet :) thx以得到您的所有支持!

所以我的程序是绘画版本。它创建了一个画布,并允许我通过使用HashSet和Iterator从鼠标获取Point's来用鼠标在画布上绘画。它还连接到...

java multithreading iterator hashset
2个回答
2
投票

使用ConcurrentSkipListSet代替HashSet


0
投票

您可以通过锁定设备来避免这种情况。在两个线程中都使用“同步”块,并在访问它们之前锁定该集合,因此不会有两个线程同时修改该集合。

© www.soinside.com 2019 - 2024. All rights reserved.