Java StringUtils并发异常
我得到以下错误:Java StringUtils并发异常,java,multithreading,apache-stringutils,Java,Multithreading,Apache Stringutils,我得到以下错误: Caused by: java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at org.apache.commons.lang3.StringUtils.join(StringUti
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.apache.commons.lang3.StringUtils.join(StringUtils.java:3428)
at org.apache.commons.lang3.StringUtils.join(StringUtils.java:3513)
用于运行StringUtils.join
StringUtils文档提到:线程安全
怎么了?代码位于实现可调用的java类中
我的完整代码:
public class MyApiCallable implements Callable<ResponseType> {
final List<String> itemsId;
MyApiCallable(List<String> itemsId) {
this.itemsId = itemsId;
}
@Override
public ResponseType call() throws Exception {
Client client = ClientBuilder.newClient();
WebTarget baseTarget = client.target("http://whatever.com").path("path").queryParam("ItemID", StringUtils.join(itemsId,",",));
ResponseType rs = target.request().get(ResponseType.class);
return rs;
}
}
下面是调用可调用函数的方法:
private Future<ResponseType> addGetMultipleItems(ExecutorService executor, List<String> itemIds) {
Callable<ResponseType> shoppingCallable = new MyApiCallable(itemIds);
Future<ResponseType> shoppingResult = executor.submit(shoppingCallable);
return shoppingResult;
}
您正试图通过interator从集合中添加/删除。你不允许那样做。请记住,增强for循环在threadsafe下使用迭代器意味着函数本身无法中断任何内容,但它仍有可能在其他地方显示中断。您正在另一个线程中修改传入列表。为什么不在问题中实际包含有问题的代码?@Dejel问题似乎不是StringUtils的方法,而是您传递给它的内容-但是请,向我们展示有问题的代码,以便我们查看。克隆列表将执行与StringUtils.join相同的操作:它将在列表上迭代以将其所有元素复制到新列表中。您需要使用线程安全列表,或者正确地同步对该列表的所有访问,或者避免在线程之间共享该列表,或者避免在构建并传递给线程后对其进行修改。设计问题在于代码中没有显示。