Java多线程ConcurrentModificationException

问题描述 投票:0回答:1

我有几个并行运行的测试,并使用下面的方法。请查看下面的代码,它偶尔会抛出ConcurrentModificationException。我不知道该如何发生?


private static MyObject myObject; 

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


java multithreading synchronization concurrentmodification
1个回答
2
投票

myObject是静态变量,要锁定它,您需要将类对象置于同步状态。您当前的实现无法正确锁定它。

import java.util.Optional;

public class Test {

    private static String myObject;

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

}
© www.soinside.com 2019 - 2024. All rights reserved.