我想知道以下方法是否是线程安全的。

用例:我从不同的位置传递了两个集合...

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;

09-26 20:59