我有一个ConcurrentSKipListSet
, 并且我正在使用循环迭代这个集合中的值for-each
。在某个时候,另一个线程将从该集合中删除一个元素。
我想我遇到了这样一种情况,一个线程删除了一个我尚未迭代的元素(或者我刚刚开始迭代它),因此从循环内进行的调用失败。
为了清楚起见,一些代码:
for(Foo foo : fooSet) {
//do stuff
//At this point in time, another thread removes this element from the set
//do some more stuff
callService(foo.getId()); // Fails
}
阅读文档我无法确定是否可行:
迭代器是弱一致的,返回的元素反映了在迭代器创建时或之后的某个时间点的集合状态。它们不抛出
ConcurrentModificationException
,并且可能与其他操作同时进行。
那么这是否可能,如果可以,有什么好的方法来处理这个问题?
谢谢
将要