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相同的操作:它将在列表上迭代以将其所有元素复制到新列表中。您需要使用线程安全列表,或者正确地同步对该列表的所有访问,或者避免在线程之间共享该列表,或者避免在构建并传递给线程后对其进行修改。设计问题在于代码中没有显示。