#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, то перенесите кэш.