Java многопоточность ConcurrentModificationException - PullRequest
0 голосов
/ 18 января 2020

У меня есть несколько тестов, которые работают параллельно, и использует метод ниже. Пожалуйста, смотрите код ниже, он иногда вызывает исключение ConcurrentModificationException. Я не могу понять, как это может произойти?


private static MyObject myObject; 

public void setupMyObject{
    syncronized(this){
       myObject = Optional.ofNullable(myObject).orElse(SomeConfig.ofDefaults());
    }
}


1 Ответ

2 голосов
/ 18 января 2020

myObject - переменная состояния c, для ее блокировки необходимо поместить объект класса в синхронизированное состояние. Ваша текущая реализация не блокирует ее должным образом.

import java.util.Optional;

public class Test {

    private static String myObject;

    public void setupMyObject(){
        synchronized(Test.class){
            myObject = Optional.ofNullable(myObject).orElse(SomeConfig.ofDefaults());
        }
    }

}
...