多个读者文件java

时间:2011-01-14 00:47:03

标签: java xml multithreading synchronization xml-serialization

我目前正在使用Java 6和Spring 3。

我有一些正在读取同一文件的进程,在本例中是XML文件。

此外,此过程需要更新该文件的内容,我需要更新日期。

该过程同时进行,因此他们有可能会同时阅读并尝试写入。

我听说过ReadWriteLock,它可以有多个阅读器,只有一个编写器。 我正在考虑这一点。但由于流程正在快速运行,

当进程A当前正在编写更新时,将出现一种情况,进程B正在等待,另一个进程C正在等待编写更新。如果进程B正在更新相同的元素,则进程B可能只是一个旧的更新。

有什么想法我能做到这一点吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

如果所有“进程”都是线程,请使用同步。这正是这个用途。 ReadWriteLock无论如何都不会保护文件本身;它用于协调对内存中对象的共享访问。

像这样的伪代码:

class XmlDatabase {

Document doc = readXml();

synchronized Date readDate()  {
    Date _date = getDateFromDoc(doc);
    return _date;
}

synchronized void writeDate(Date _date) {
    addDateToDoc(_date);
    writeDocToFile(doc);
}  

}

很多人会告诉你同步很慢等等。除非你正在实现一些使用同步原语大规模并发的东西,否则它会正常工作。如果需要,您可以随后使用java.util.concurrent进行优化。使用普通同步的简单性和可读性是值得的。如果您需要让其他进程访问数据,只需使用RMI或其他网络解决方案包装数据库类。