我正在 spring-boot 应用程序中使用Java @async
批注来处理和上传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类。您能否让我知道它是否会失败?
答案 0 :(得分:1)
如果Rows集合被多个线程共享,则可能存在ConcurrentModificationException
。当线程使您的“行”列表发生变化时,情况就是如此。如果不是这样,则您的代码中没有共享的可变性,因此我们可以说它是线程安全的。
答案 1 :(得分:0)
由于创建的对象位于方法调用中,因此它是一个本地对象,并且所有本地对象都是线程安全的。
希望这会有所帮助!