gpt4 book ai didi

java - 通过多个线程删除 java.util.Collection 元素

转载 作者:行者123 更新时间:2023-11-29 09:46:05 25 4
gpt4 key购买 nike

在多线程模块中,我不关心它是否线程安全地写入 java.util.Collection(例如 java.util.Set ) 目的。它所做的是通过多个线程移除一些独立的元素,这些线程可能同时对同一个元素执行移除。然后,会发生什么?该元素被删除,或抛出任何异常?


可佳

最佳答案

当您删除不同的对象时,甚至可能抛出 ConcurrentModificationException。这取决于您正在使用的 Set 的实现:remove() 方法可能会遍历该集合。或者更糟:它可能会修改一些其他内部变量并使集合处于不一致状态而不抛出任何异常。

有一个非常简单的解决方案:

Set safeSet = Collections.synchronizedSet(set);

如果要迭代,还是要注意,apidoc中有描述:http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedSet%28java.util.Set%29但所有其他方法(包括删除)都可以。

关于java - 通过多个线程删除 java.util.Collection 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com