我想知道以下方法是否是线程安全的。
用例:我从不同的位置传递两个集合......
public static Collection<String> checkIfValidUUIDCollectionAndRefine(Collection<String> uuids){
for(String uuid : uuids){
if(!checkIfValidUUID(uuid)){
uuids.remove(uuid);
}
}
return uuids;
}
答案 0 :(得分:3)
它将为每个无效的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;
答案 1 :(得分:-1)
您需要synchronized
使其thread
安全。然后,您需要使用Iterator
来避免ConcurrentModificationException
。