Я пытаюсь найти ответ для следующего за последние пару дней, но не могу найти исчерпывающий ответ
Постановка проблемы
У меня есть пользовательская JSPкласс тега, который обрабатывает отправку веб-формы, захватывает данные и записывает их в тот же файл в файловой системе.Как и во всех веб-приложениях, это может быть запущено одновременно, и я боюсь, что несколько потоков будут в действии обрабатывать каждую отправку (мы все знаем, как работает сервлет.)
CODE
synchronized (this){
final String reportFileName = "testReport.csv";
File reportDir = new File( rootCsDirectory, "reports" );
if(!reportDir.isDirectory())reportDir.mkdir();
File reportFile = new File (reportDir, reportFileName);
logReport(reportFile,reportContent.toString());
}
ВЫПУСК: - Объект File может быть открыт одним потоком для записи, и в то же время другой поток может попытаться получить доступ и завершиться с ошибкой и выдать исключение. Поэтому я подумал о синхронизации (onобъект) должен решить проблему, но читайте где-нибудь, где у jsp engine будет пул объектов тегов jsp , поэтому я боюсь, что synchronized (this) не будет работать, и это должно бытьизменено на synchronized (this.getClass ()) FYI: Приведенный выше код помещен в класс пользовательских тегов JSP.
EDIT:
Вопрос 1: в случае синхронизации блока кода с помощью synchronized (this) ИЛИ synchronized (this.getClass ())
Вопрос 2: Как будет выглядеть тот же сценарийобрабатывается, если веб-приложение развернуто в кластерной среде?