我在Android应用程序中有一个多线程环境。我使用单例类来存储数据。这个单例类包含一个使用synchronized方法访问的arraylist。
应用程序使用此arraylist在app中呈现图像。
初始问题:出现并发修改错误,所以我使get arraylist函数同步。
当前问题:并发修改错误未发生但返回空arraylist之间(可能存在并发访问时)。
目标:我想检测何时并发修改,以便返回空arraylist beeing而不是返回arraylist的最后状态。
public synchronized List<FrameData> getCurrentDataToShow() {
List<FrameData> lisCurrDataToShow = new ArrayList<FrameData>();
// for (FrameData fd : listFrameData) {//concurrent modification exception
//todo iterator test
Iterator<FrameData> iterator = listFrameData.iterator();
while (iterator.hasNext()) {
FrameData fd = iterator.next();
long currentTimeInMillis = java.lang.System.currentTimeMillis();
if ((currentTimeInMillis > fd.getStartDate().getTime() && currentTimeInMillis < fd.getEndDate().getTime()) || (fd.isAllDay() && DateUtils.isToday(fd.getStartDate().getTime()))) {
if (new File(ImageFrameActivity.ROOT_FOLDER_FILES + fd.getFileName()).exists()) {
lisCurrDataToShow.add(fd);
}
}
}
if (lisCurrDataToShow.size() == 0) {
lisCurrDataToShow.add(new FrameData(defaultFileName, null, null, null, String.valueOf(120), false));
}
return lisCurrDataToShow;
}
请帮忙!
每次都很少发生此问题。