基本上,我有一个具有 2 种方法的类:一种将对象序列化为 XML 文件,另一种用于从 XML 读取对象。这是恢复对象的方法中同步部分的示例:
public T restore(String from) throws Exception {
// variables declaration
synchronized (from) {
try {
decoder = new XMLDecoder(new BufferedInputStream(
new FileInputStream(from)));
restoredItem = decoder.readObject();
decoder.close();
} catch (Exception e) {
logger.warning("file not found or smth: " + from);
throw new Exception(e);
}
}
// try to cast it
}
序列化对象时采用类似的方法。现在,当我创建一个单元测试时,它依次创建 10 个线程,每个线程尝试序列化并立即读取布尔值或字符串,它会失败,表明发生 ClassCastExceptions。这让我觉得我弄错了序列化(在单线程环境中一切正常)。如果你一直和我在一起:),这里有两个问题我需要你的帮助:
- 对传递给方法的字符串参数进行同步是否有意义(考虑到 java 中有一个字符串池)?顺便说一句,我尝试在 XMLSerializer 类本身上进行同步,结果保持不变。
- 如何正确同步单个文件的 io 操作?