因此,我坚持使用线程敌对的单例实现,该实现将Iterator返回给HashSet。
我有两个线程-有时-同时访问此Iterator来加载数据。我称它们为luckyThread和unluckyThread。
其中一个(unluckyThread)引发ConcurrentModificationException。
问题:可以安全地假设其他线程一切正常吗?
具体来说:luckyThread加载的数据是否没有损坏?
(发生这种情况的几次系统都很好,除了unluckyThread之外)
不要以为这个问题不需要任何代码示例,但是如果需要,我很乐意提供它们。
更新:(无需赘述)只要线程之一加载干净的数据集,系统就可以正常运行。不用说我已经解决了这个问题,但这使我开始思考如何从此类异常中恢复,并且在网上找不到任何具体的东西。
最佳答案
如果您查看ConcurrentModificationException的文档,它会明确指出:
相反,您可能应该使用其他机制来确保没有并发访问(例如,在访问基础HashSet时,对单例使用synchronized
-block)。