Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程ConcurrentModificationException_Java_Multithreading_Synchronization_Concurrentmodification - Fatal编程技术网

Java多线程ConcurrentModificationException

Java多线程ConcurrentModificationException,java,multithreading,synchronization,concurrentmodification,Java,Multithreading,Synchronization,Concurrentmodification,我有几个并行运行的测试,并使用下面的方法。请参阅下面的代码,它偶尔抛出ConcurrentModificationException。我想不出这是怎么发生的 私有静态对象; 公共对象{ 同步化(本){ myObject=Optional.ofNullable(myObject.orElse(SomeConfig.ofDefaults()); } } myObject是一个静态变量,要锁定它,需要将类对象置于同步状态。您当前的实现没有正确锁定它 import java.util.Optional

我有几个并行运行的测试,并使用下面的方法。请参阅下面的代码,它偶尔抛出ConcurrentModificationException。我想不出这是怎么发生的


私有静态对象;
公共对象{
同步化(本){
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抱歉,这是一个错误。我更正了帖子