我想知道以下方法是否是线程安全的。
用例:我从不同的位置传递了两个集合...
public static Collection<String> checkIfValidUUIDCollectionAndRefine(Collection<String> uuids){
for(String uuid : uuids){
if(!checkIfValidUUID(uuid)){
uuids.remove(uuid);
}
}
return uuids;
}
最佳答案
它将为每个无效的UUID抛出ConcurrentModificationException
。
第二点是因为:
for(String uuid : uuids){
if(!checkIfValidUUID(uuid)){
uuids.remove(uuid);
}
}
foreach循环在内部创建一个迭代器,但是您可以修改该迭代器。您必须创建一个迭代器并使用
.remove()
。例如:
final Iterator<String> iterator = uuids.iterator();
String uuid;
while (iterator.hasNext()) {
uuid = iterator.next();
if (!checkIfValidUUID(uuid))
iterator.remove();
}
return uuids;