如何避免以下代碼中的併發修改異常? BeanList是Bean對象列表如何避免在java中使用集合時發生併發修改異常
Bean bean = BeanList.get(0);
List<Bean> tempList = BeanList.subList(1, BeanList.size());
Collections.sort(tempList);
tempList.add(0, bean);
BeanList.clear();
BeanList.addAll(tempList);
如何避免以下代碼中的併發修改異常? BeanList是Bean對象列表如何避免在java中使用集合時發生併發修改異常
Bean bean = BeanList.get(0);
List<Bean> tempList = BeanList.subList(1, BeanList.size());
Collections.sort(tempList);
tempList.add(0, bean);
BeanList.clear();
BeanList.addAll(tempList);
作爲將來的參考。嘗試將您的問題縮減爲最少的編譯示例。它使我們的工作更輕鬆。描述你問題中的所有數據類型。這裏我們必須猜測你的BeanList的數據類型是什麼。也遵守Java命名約定。班級名稱以大寫字母開頭。成員變量以小寫字母(即beanList而不是BeanList)開頭。錯誤地格式化的代碼對我們來說很難,你想從中獲得幫助的人閱讀。提供堆棧跟蹤並告訴代碼中的哪一行會導致異常。
您的問題不在Bean類或同步中。
您的問題在於您在子列表上的操作方式。
List.subList()並沒有真正創建一個新的列表。它在現有列表中創建一個「視圖」,並與原始列表共享數據結構。當清除原始列表的內容時,您還要清除子列表的內容,以及何時嘗試訪問子列表(其數據已更改),您將得到異常。
創建一個新列表,您將該列表中的所有元素添加到該列表中。
List<Bean> tempList = new ArrayList<Bean>();
tempList.addAll(list.subList(1, list.size()));
感謝您的寶貴意見。 – nila
BeanList是你的類嗎?如果是這樣,你可以在你的問題中添加BeanList類的相關部分嗎? –
Bean類 公共final類Bean實現可比,序列化{ 私人日期踵; 公開日期getPostDate(){ \t \t回報(?(踵== NULL)新的Date():事後日期); \t} \t公共無效setPostDate(日期踵){ \t \t this.postDate =踵; \t} @覆蓋 \t公衆詮釋的compareTo(豆豆){ \t \t回報(bean.getPostDate()的compareTo(這一點。發佈日期)); \t} } –
nila
我指的是BeanLIST類。你可以將它添加到問題中,而不是評論中,它很難讀取。但我懷疑同步問題。 –