以下情况可能会导致竞争状况。我正在研究的问题是,在方法调用与对actionWasCompleted的原子调用之间是否存在上下文切换。

private final AtomicReference<ActionCompleted> actionWasCompleted;

public void actionWasCompleted(){
    actionWasCompleted.compareAndSet(ActionCompleted.INITIAL, ActionCompleted.COMPLETED);
}


如果那是真的,那不是吗

public void actionWasCompleted(){
    synchronized(this){
    ....
    }
}


这是否意味着上面的代码和

public synchronized void actionWasCompleted(){
....
}

最佳答案

在方法调用和对actionWasCompleted的原子调用之间是否存在上下文切换。


上下文切换可以随时发生。


这是否意味着上面的代码和


该代码是等效的。在获得锁之前,一个或多或少不太可能进行上下文切换。

一个隐含的问题是; “有问题吗?”

在获得锁之前,可能会发生任何事情,但这是预期的行为。

10-08 01:18