Я пытаюсь перебрать 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
}
}
}
Что было бы хорошим решением, чтобы избежать этого?