gpt4 book ai didi

使用迭代器时出现 java.util.ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-02 04:28:23 27 4
gpt4 key购买 nike

我有以下代码来形成 url,但有些客户端在 for 循环中报告了异常。java.util.ConcurrentModificationException 在 java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)

    List<NameValuePair> requestParams = adRequest
.createRequestParamsList(view.getContext());

RequestTask currentTask = new RequestTask(this,
view.getUserAgent(), view.getContext(), keyCode);

try {
currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
baseRequestUrl + Request.REQ_URI, requestParams);

} catch (Exception e) {

}

String debugUrl = "";
synchronized (this) {
debugUrl = baseRequestUrl + Request.REQ_URI + "?";
for (Iterator<NameValuePair> iterator = requestParams.iterator(); iterator.hasNext();) {
NameValuePair nvp = iterator.next();
debugUrl = debugUrl + nvp.getName() + "=" + nvp.getValue() + "&";
}
debugUrl = debugUrl.substring(0, debugUrl.length() - 1);
}

在RequestTask中修改requestParam。为什么会失败?

最佳答案

在您发表评论后,我怀疑您应该在 requestParams 对象上同步,而不是在 this 上同步。

异步任务没有对正在迭代的对象的引用,因此它们不会锁定同一对象,这实际上与根本不同步相同。

确保两个类在同一对象的同一引用上同步!

PS:如果两个类都执行了同步(this),那么它们就可以在不同的对象实例上有效地同步。

关于使用迭代器时出现 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com