基本上,我有一個包含2個方法的類:一個用於將對象序列化爲XML文件,另一個用於從XML讀取對象。 下面是從恢復的對象的方法的同步部分的一個示例:同步java中的字符串方法參數的io操作?
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個線程,試圖序列化並立即讀取一個布爾值或一個字符串,它將失敗,顯示出現ClassCastException。這讓我覺得我的序列化錯了(在單線程環境中一切正常)。如果你一直陪着我到這一點:),這裏有兩個問題,我需要你的幫助:
- 是否有意義的同步傳遞給方法的字符串參數(考慮到有一個字符串池在java中)?順便說一句,我試着同步XMLSerializer類本身,結果保持不變。
- 我該如何正確同步單個文件上的io操作?
哪一行是ClassCastException發生? – 2008-10-12 13:13:50
restoredItem對象是實例變量還是局部變量?這可能是多線程問題的根源。一個解碼器解碼一個對象,下一個線程用其他東西覆蓋它。 – 2008-10-12 17:20:28