【发布时间】:2018-05-11 07:22:15
【问题描述】:
我在我的项目中使用通用实体转换器。
我注意到有时转换器会抛出 java.util.ConcurrentModificationException
还有一个4岁的Post没有答案。
我尝试使用 Iterator 而不是普通的 for-loop,但没有帮助。
有没有办法创建线程安全的转换器?
@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter {
private static Map<Object, String> entities = new WeakHashMap<Object, String>();
@Override
public String getAsString(FacesContext context, UIComponent component, Object entity) {
synchronized (entities) {
if (!entities.containsKey(entity)) {
String uuid = UUID.randomUUID().toString();
entities.put(entity, uuid);
return uuid;
} else {
return entities.get(entity);
}
}
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
Iterator<Map.Entry<Object, String>> tempIt = entities.entrySet().iterator();
while (tempIt.hasNext()) {
Map.Entry<Object, String> nextObj = tempIt.next();
if (nextObj.getValue().equals(uuid)) {
return nextObj.getKey();
}
}
return null;
}
}
【问题讨论】: