【发布时间】:2011-04-14 09:41:01
【问题描述】:
我的项目有点问题。我正在为 Android 开发一个应用程序,并且想将我的日志发布到服务器。几乎一切正常,但我遇到了一个小问题。我的班级中有一个 ArrayList 来处理帖子:
private ArrayList<String> logsToPost = new ArrayList<String>();
以及将数据放入此列表的方法和一个单独的线程,该线程每 20 秒运行一次,然后上传日志并清空列表。问题是,如果我在线程尝试上传数据并清理列表时尝试写入此列表,则会收到 ConcurrentModificationException。我的代码如下所示:
Iterator<String> keyIter = logsToPost.iterator();
while (keyIter.hasNext()) {
String next = keyIter.next();
String[] params = next.split(FormFactory.FUNCTION_SEP);
HttpData hd = HttpRequest.post(LOGCAT_LOG_URL, "userId=" + sb.userId + "&pdaId=" + sb.pdaId
+ "&tag=" + params[0] + "&logContent=" + params[1]);
logsToPost.remove(next);
}
我知道有一个同步列表和同步块,但我无法让同步列表在我的机器人上工作。你有什么想法我该如何实现这个日志记录程序?我尝试使用 volatile 关键字,但仍然出现异常。
【问题讨论】:
标签: java concurrency thread-safety synchronized