Быстрая обработка файлов в многопоточном режиме

#java #multithreading #file

#java #многопоточность #файл

Вопрос:

Я разрабатываю веб-приложение на Java. У него есть файл, который считывается при каждом запросе страницы, но я должен подумать о его изменении (что случается редко). Вам нужно что-то придумать, чтобы все заработало как можно быстрее. Любой совет?

Ответ №1:

Вы можете использовать что-то вроде copy_on_change . Если ваш файл /path/myFile_v1.txt Напишите код, подобный

 private AtomicInteger version=1;

public String getFilePath() {
    return "/path/myFile_v" version.get() ".txt"
}

public void synchronized makeAChange() {
     // create a new copy of the file with some changes
     version.incrementAndGet();
}
 

вы можете удалять старые копии через некоторое время или удалять версию-2 каждый раз.
Потоки чтения не блокируются во время внесения изменений.

Комментарии:

1. Спасибо. Но я хотел немного другой процесс. Есть одна мысль, но она мне не очень нравится. Я могу создать ресурс с файловым кэшем. При обращении к ресурсу проверяется флаг изменения файла, и если флаг имеет значение true, он обновляет кэш. Если false, то перенесите кэш.