Получение ConcurrentModificationException при изменении только свойств объекта внутри списка - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь перебрать ArrayList объектов в двух разных потоках.

Для примера предположим, что тип объектов в списке будет Bottle, а два потока, которые пытаются получить доступ к этому списку, будут Buyer и Seller.

Я пытаюсь обновить объекты Bottle, используя оба метода в потоках. Я не добавляю и не удаляю объекты из списка. (оба метода static и synchronized)

И работает несколько потоков как Buyer, так и Seller.

Возможно ли получить это exception, поскольку один из потоков Seller пытается обновить тот же объект Bottle, в то время как один из потоков Покупателя обновляет его?

Просто чтобы получить лучшее представление, список и методы вроде как ниже.

class Seller {
    static synchronized void someMethod(List<Bottle> bottles) {
        for (Bottle bottle:bottles)
        {
            //some code
            bottle.updateAPropertyInsideBottleObject(newValue);
            //more code
        }
    }
}

class Buyer {
    static synchronized void someMethod(List<Bottle> bottles) {
        for (Bottle bottle:bottles)
        {
            //some code
            bottle.updateAPropertyInsideBottleObject(newValue);
            //more code
        }
    }
}

Что было бы хорошим решением, чтобы избежать этого?

...