java种族条件方法调用原子调用

时间:2016-04-04 19:12:53

标签: java multithreading concurrency

以下会导致竞争条件。我正在看的问题是,方法调用和对ActionWasCompleted的原子调用之间是否可以有上下文切换。

private final AtomicReference<ActionCompleted> actionWasCompleted;

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

如果那是真的,那么

的情况就不一样了
public void actionWasCompleted(){
    synchronized(this){
    ....
    }
}

这意味着上述代码与此

之间存在差异
public synchronized void actionWasCompleted(){
....
}

1 个答案:

答案 0 :(得分:1)

  

是否可以在方法调用和对ActionWasCompleted的原子调用之间进行上下文切换。

上下文切换可以在任何时候发生。

  

这意味着上述代码与此

之间存在差异

代码是等效的。在获得锁定之前,一个是上下文切换的可能性不大于另一个。

隐含的问题是; &#34;有问题吗?&#34;

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