0
が競合状態になることがあります。私が見ている問題は、メソッド呼び出しとactionWasCompletedへのアトミック呼び出しの間にコンテキスト切り替えが存在する可能性があります。それが本当ならばJavaの競合状態のメソッド呼び出しでアトミックコール
private final AtomicReference<ActionCompleted> actionWasCompleted;
public void actionWasCompleted(){
actionWasCompleted.compareAndSet(ActionCompleted.INITIAL, ActionCompleted.COMPLETED);
}
することは、それは
public void actionWasCompleted(){
synchronized(this){
....
}
}
と同じケースではありませんそして、それは、上記のコードと、この
public synchronized void actionWasCompleted(){
....
}
重要ですか?コンテキストスイッチは、コールの直前にコンテキストスイッチに相当します。 (また、コンテキストスイッチはマルチスレッドに関する正確な方法ではありません。) – user2357112
同期の最後の2つの変種は等しいです。ジャンプするときにメソッドがロックされます。最後のメソッドは、メソッドを呼び出すときに常にロックされます。 synchronizedブロックを持つバージョンでは、メソッド内のロックされたブロックの前に操作を実行できます。 –
質問は不明です。 '....'はどういう意味ですか?最初のコードスニペットでは、参照変数を1回更新するだけです。それはどのようにレースする予定ですか?ものによって? – Holger