以下会导致竞争条件。我正在看的问题是,方法调用和对ActionWasCompleted的原子调用之间是否可以有上下文切换。
private final AtomicReference<ActionCompleted> actionWasCompleted;
public void actionWasCompleted(){
actionWasCompleted.compareAndSet(ActionCompleted.INITIAL, ActionCompleted.COMPLETED);
}
如果那是真的,那么
的情况就不一样了public void actionWasCompleted(){
synchronized(this){
....
}
}
这意味着上述代码与此
之间存在差异public synchronized void actionWasCompleted(){
....
}
答案 0 :(得分:1)
是否可以在方法调用和对ActionWasCompleted的原子调用之间进行上下文切换。
上下文切换可以在任何时候发生。
这意味着上述代码与此
之间存在差异
代码是等效的。在获得锁定之前,一个是上下文切换的可能性不大于另一个。
隐含的问题是; &#34;有问题吗?&#34;
在获得锁定之前,可能会发生任何事情,但这是预期的行为。