第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

并發(fā)修改具有同步列表的異常

并發(fā)修改具有同步列表的異常

慕桂英546537 2022-09-28 16:23:32
在以下情況下,我收到并發(fā)修改異常錯(cuò)誤。發(fā)生這種情況的行標(biāo)記為“并發(fā)修改例外<--------”我有一個(gè)主線程,從列表中讀取如下:List<ThemeCacheIndex> list = Collections.synchronizedList(themeCacheList);synchronized (list) {    Iterator<ThemeCacheIndex> it = list.iterator();    while (it.hasNext()) {        ThemeCacheIndex themeCacheIndex = it.next();  <-------- ConcurrentModificationException        doSomething();    }}我有一個(gè)從此列表中刪除的異步任務(wù): @Override    protected String doInBackground(String... params) {        someElementsToRemove = calculateWhichElementsToRemove();        for(int i=0 ; i < someElementsToRemove.size() ; i++){            themeCacheList.remove(someElementsToRemove.get(i));        }    }我可以想象,它涉及并發(fā)情況,但我想通過(guò)在主線程上同步列表來(lái)防止這種情況。似乎我不理解多線程和共享對(duì)象的概念。有人可以幫助我解決這個(gè)問(wèn)題嗎?如何防止此沖突?
查看完整描述

3 回答

?
萬(wàn)千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

異步任務(wù)代碼沒(méi)有問(wèn)題。對(duì)“主”線程代碼執(zhí)行此操作:


synchronized (themeCacheList) {

    Iterator<ThemeCacheIndex> it = themeCacheList.iterator();

    while (it.hasNext()) {

        ThemeCacheIndex themeCacheIndex = it.next();

        doSomething();

    }

}

如您所見(jiàn),我已經(jīng)刪除了,因?yàn)樗嵌嘤嗟?,我直接?上同步。Collections.synchronizedListthemeCacheList


查看完整回答
反對(duì) 回復(fù) 2022-09-28
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

不確定我有一個(gè)好的解決方案,但我想這2個(gè)例子顯示了問(wèn)題和可能的解決方案?!翱赡艿闹貜?fù)”答案沒(méi)有顯示任何解決方案,而只是解釋了問(wèn)題所在。


@Test

public void testFails(){


    List<String> arr = new ArrayList<String>();

    arr.add("I");

    arr.add("hate");

    arr.add("the");

    arr.add("ConcurrentModificationException !");


    Iterator i = arr.iterator();



    arr.remove(2);


    while(i.hasNext()){

        System.out.println(i.next());

    }

}


@Test

public void testWorks(){


    List<String> arr = new CopyOnWriteArrayList<>();

    arr.add("I");

    arr.add("hate");

    arr.add("the");

    arr.add("ConcurrentModificationException !");


    Iterator i = arr.iterator();



    arr.remove(2);


    while(i.hasNext()){

        System.out.println(i.next());

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-09-28
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

引用爪哇語(yǔ)Collections

返回由指定列表支持的同步(線程安全)列表。為了保證串行訪問(wèn),通過(guò)返回的列表完成對(duì)支持列表的所有訪問(wèn)至關(guān)重要。

如果您修改了 ,則像您所做的那樣進(jìn)行同步將無(wú)濟(jì)于事,因?yàn)閭浞萘斜硪驯恍薷摹?code>AsyncTaskthemeCacheList


查看完整回答
反對(duì) 回復(fù) 2022-09-28
  • 3 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)