У меня есть метод, который выполняется в несколько потоков. Метод выполняет действие, а затем записывает результат в отчет экстента.
public LinkedHashMap doSomething(){
// do something
....
extentReporObj.writeToReport(testName,result,..);
}
Вышеуказанный метод вызывается внутри метода вызова класса, который реализует Callable
Проблема, с которой я сталкиваюсь, состоит в том, что несколько потоков пытаются записать в отчет одновременно и выдает исключение ConcurrentModificationException.
Я сделал метод writeToReport синхронизированным
public synchronized void writeToReport(String testName, String url, String request, String response, String resultStatus) {
setTest(testName);
test.log(LogStatus.INFO, testName + " Test Start");
test.log(LogStatus.INFO, "API URL :: " + url);
if (request != null)
test.log(LogStatus.INFO, "API Request :: " + request);
if (resultStatus.equalsIgnoreCase("pass"))
test.log(LogStatus.PASS, "Status :: Pass");
else
test.log(LogStatus.FAIL, "Status :: Fail");
if (null != response)
test.log(LogStatus.INFO, "API Response :: " + response);
test.log(LogStatus.INFO, testName + " Test End");
extent.endTest(test);
}
Другое дело, что testName - это глобальная переменная, которая переопределяется другим потоком перед помощью экстента. может быть выполнена строка, которая дает мне исключение ExtentTestInterruptedException.
Я много искал, но все они говорят, что синхронизируют метод, но в моем случае он не работает.