Java多线程ConcurrentModificationException
我有几个并行运行的测试,并使用下面的方法。请参阅下面的代码,它偶尔抛出ConcurrentModificationException。我想不出这是怎么发生的Java多线程ConcurrentModificationException,java,multithreading,synchronization,concurrentmodification,Java,Multithreading,Synchronization,Concurrentmodification,我有几个并行运行的测试,并使用下面的方法。请参阅下面的代码,它偶尔抛出ConcurrentModificationException。我想不出这是怎么发生的 私有静态对象; 公共对象{ 同步化(本){ myObject=Optional.ofNullable(myObject.orElse(SomeConfig.ofDefaults()); } } myObject是一个静态变量,要锁定它,需要将类对象置于同步状态。您当前的实现没有正确锁定它 import java.util.Optional
私有静态对象;
公共对象{
同步化(本){
myObject=Optional.ofNullable(myObject.orElse(SomeConfig.ofDefaults());
}
}
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());
}
}
}
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());
}
}
}
你能给我看更多的代码吗?你所展示的是你认为问题所在的地方。然而,情况可能并非如此,而且,即使事实证明是这样,也没有形成答案的上下文。该代码不能抛出
ConcurrentModificationException
——此外,该代码确实存在严重缺陷:的可空(myObject)
意味着myObject
可以是null
,而且本质上,orElse(…)
永远不会有效,因为只有当myObject
为null时才会产生效果,这将使myObject.ofDefaults()
抛出一个NullPointerException
。当然,除非Defaults()的是一个静态方法,在这种情况下,代码应该是MyObject.ofDefaults()
,使用类而不是实例来限定方法调用,即代码有缺陷。@Andreas抱歉,这是一个错误。我更正了邮件,你能再显示一些代码吗?你所展示的是你认为问题所在的地方。然而,情况可能并非如此,而且,即使事实证明是这样,也没有形成答案的上下文。该代码不能抛出ConcurrentModificationException
——此外,该代码确实存在严重缺陷:的可空(myObject)
意味着myObject
可以是null
,而且本质上,orElse(…)
永远不会有效,因为只有当myObject
为null时才会产生效果,这将使myObject.ofDefaults()
抛出一个NullPointerException
。当然,除非Defaults()的是一个静态方法,在这种情况下,代码应该是MyObject.ofDefaults()
,使用类而不是实例来限定方法调用,即代码有缺陷。@Andreas抱歉,这是一个错误。我更正了帖子