Несколько читателей файл Java - PullRequest
0 голосов
/ 14 января 2011

В настоящее время я использую Java 6 с Spring 3.

У меня есть несколько процессов, которые читают один и тот же файл, в данном случае это файл XML.

Кроме того, эти процессы должныобновить содержимое этого файла, что мне нужно, чтобы обновить дату.

Процесс выполняется одновременно, поэтому есть возможность, что они будут читать и пытаться писать одновременно.

Я слышало ReadWriteLock, который может иметь несколько читателей и только 1 писатель.Я рассматриваю это в данный момент.Но поскольку процесс выполняется быстро,

Будет сценарий, когда процесс A в данный момент пишет обновление, а процесс B ожидает, а другой процесс C ожидает записи обновления.Процесс B может быть просто старым обновлением, если процесс B обновляет тот же элемент.

Есть ли идеи, как мне этого добиться?

Спасибо,

1 Ответ

1 голос
/ 14 января 2011

Если все «процессы» являются потоками, используйте синхронизацию.Это именно то, для чего это.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 или другим сетевым решением.

...