fro*_*ite 2 java linux multithreading java-8
所以我坚持使用线程敌对单例实现,它将Iterator返回给HashSet.我有两个线程 - 有时 - 同时访问此迭代器以加载数据.我称之为luckyThread和unluckyThread. ONE他们(unluckyThread)的抛出一个ConcurrentModificationException的.
问题:可以安全地假设其他线程一切顺利吗?具体来说:luckyThread加载的数据是否没有腐败?(发生这种情况的时间系统很好,除了不幸的线程)不要认为这个问题需要任何代码示例,但我很乐意在需要时提供它们.
更新:(没有深入细节)只要其中一个线程加载一个干净的数据集,系统就可以了.并且不用说我修复了这个问题,但这让我想到从这些异常中恢复,我没有找到任何具体的在线.
如果查看ConcurrentModificationException的文档,它会明确指出:
请注意,无法保证快速失败的行为,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬性保证.失败快速操作会尽最大努力抛出ConcurrentModificationException.因此,编写依赖于此异常的程序以确保其正确性是错误的:ConcurrentModificationException仅应用于检测错误.
相反,您可能应该使用其他一些机制来确保没有并发访问(例如synchronized在访问底层HashSet时使用带有单例的-block).