LINUX.ORG.RU

ArrayList в Java, concurrentmodificationexception при переборе

 


0

1

Казалось бы, ничего не удаляют, просто перебирают элементы,

/*for(Virus l : virus){
            if(l.team != playerIndexBact){
                playerWin = false;
            }else{
                playerLose = false;
            }
        }*/

        for(int i = 0; i < virus.size(); i++){
            Virus l = virus.get(i);
            if(l.team != playerIndexBact){
                playerWin = false;
            }else{
                playerLose = false;
            }
        }

Закоментированный код падает при большом количестве объектов, не закоментированный вроде как не падает. Почему так?

★★★

потому что в другом потоке барабашка модифицирует arraylist, а в первом цикле используется итератор, который от такого безобразия китается ыксепшынами

Deleted
()
Ответ на: комментарий от Deleted

потому что в другом потоке

Что именно за поток? У меня просто создается «поток»(если я правильно понимаю) рисования.

abs ★★★
() автор топика
Ответ на: комментарий от abs

Этот вопрос тебе зададут остальные участники обсуждения, а я пойду, а то мне стало стыдно программировать на одном языке с тобой.

Deleted
()
Ответ на: комментарий от Deleted

Примерно все выглядит так

public class FullscreenActivity extends Activity implements OnTouchListener {
ТУТ много кода и классов, класс вирусов тут.
функция роботы с вирусами.
в событии создания
dv = new DrawView(this);

class DrawView extends SurfaceView implements SurfaceHolder.Callback {
        private DrawThread drawThread;
...
class DrawThread extends Thread {
И тут вызов функции роботы с вирусами
}
}

abs ★★★
() автор топика
Ответ на: комментарий от Deleted

покури азы многопоточного программирования, хотябы пару толстых статеек, так нельзя.

Так я вообще с радостью бы его избегал. Можешь дать ответ что делать именно сейчас? Времени маловато...

abs ★★★
() автор топика
Ответ на: комментарий от abs

Времени маловато...

используй CopyOnWriteArrayList и больше не программируй если у тебя такие отговорки от чтения доков

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

используй CopyOnWriteArrayList

Спасибо

покури азы многопоточного программирования

Можно ссылку на пару толстых статей на будущее??

abs ★★★
() автор топика
Ответ на: комментарий от abs

Можно ссылку на пару толстых статей на будущее??

лучше книгу наподобие «философия java» но я не помню есть ли там глава про многопоточность, хотя должна быть, и обязательно чтобы книга была про java 1.6 или свежее

Deleted
()
Ответ на: комментарий от Deleted

subwoofer я тут подумал... потока то у меня хоть и два, но все это происходит только в одном.

то есть, есть функция something(){ ... перебор массива. ... перебор и удаление некоторых элементов массива. }

И вызывается эта функция всегда из потока рисования.

abs ★★★
() автор топика

потоки есть? а если найду?

umren ★★★★★
()
3 июня 2015 г.
Ответ на: комментарий от abs

Назначь функцию f:чтобы избежать повтора одного и того же действия несколько раз Void==

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.