我在写一个多线程程序。扩展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