Потоковая безопасность при использовании аннотации @Async - PullRequest
0 голосов
/ 19 сентября 2018

Я использую аннотацию java @async в моем приложении spring-boot для обработки и загрузки файлов Excel.Он работает нормально, даже если я делаю загрузку нескольких файлов примерно в одно и то же время.Однако я хочу знать, является ли приведенный ниже код поточно-ориентированным или нет.Я понимаю, что это не так, и это может потерпеть неудачу.Я не могу воспроизвести проблему параллелизма

Мой код:

while (rowIterator.hasNext()) {  
    Row row=rowIterator.next();

    if(row.getRowNum()==0) 
        continue;

    BatchScript script=new BatchScript();                       
    String rtId=row.getCell(0).toString();
    String query=row.getCell(1).toString();
    String agent=row.getCell(2).toString();
    script.setRtId(rtId);
    script.setQuery(query);
    script.setAgentName(agent);
}

В коде BatchScript мой класс POJO.Пожалуйста, дайте мне знать, если это не удастся или нет?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Если коллекция строк является общей для нескольких потоков, существует вероятность ConcurrentModificationException.Это будет тот случай, когда потоки изменят ваш список строк.Если нет, то в вашем коде нет общей изменчивости, поэтому мы можем сказать, что он поточно-ориентированный.

0 голосов
/ 19 сентября 2018

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

Надеюсь, это поможет!

...