我在寫一個多線程程序。擴展Thread的類有一個static Hashtalbe<Integer, SessionData> sessionDataTable
。
在這個類中,我會做一些改變sessionDataTable的事情,比如插入一個新的SessionData對象,從中刪除SessionData對象或修改Hashtable中的SessionData對象。
最後,我會寫的哈希表來使用ObjectOutputStream文件,方法是一樣的東西
public static synchronized void saveDataSessionState()
{
...
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Constants.logFile));
oos.writeObject(sessionDataTable);
...
}
我想知道如果一個線程是做oos.writeObject(sessionDataTable);
但其他線程正在修改的sessionDataTable會發生什麼(就像我上面所說的),同時在這個方法之外的某個地方。將對象寫入文件時,上述方法是否會導致異常?
如果是,我怎麼能避免這個問題?使用鎖定?但是,當我修改Hashtable時,我需要鎖定它。
謝謝。
謝謝。你的評論幫了我很多。 – Jason