【发布时间】:2014-12-22 13:27:01
【问题描述】:
实际上我只想要一个 XStream 实例。所以我有以下课程:
public class XSteamTool{
private static XStream xStream = new XStream();
static{
xStream.ignoreUnknownElements();
xStream.registerConverter(new DateConverter(TimeZone.getDefault()));
}
public static String objToXml(Object obj){
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
}
public static <T> T xmlToObj(String xmlString, Class<T> clazz){
xStream.processAnnotations(clazz);
return(T)xStream.fromXML(xmlString);
}
}
但这在多线程环境中会遇到问题。我在官方文档中找到了注释:XStream 在配置时不是线程安全的。不幸的是,注释正在定义配置更改,现在在处理对象编组时应用该更改
我尝试在 processAnnotations 之前进行同步,这看起来不错:
public static String objToXml(Object obj){
synchronized (obj.getClass()) {
xStream.processAnnotations(obj.getClass());
}
return xStream.toXML(obj);
}
public static <T> T xmlToObj(String xmlString, Class<T> clazz){
synchronized (clazz) {
xStream.processAnnotations(clazz);
}
return(T)xStream.fromXML(xmlString);
}
我想知道使用是否正确。任何建议表示赞赏。
【问题讨论】:
标签: java multithreading xstream