Javaのどの操作がアトミックと見なされますか?
回答:
64 bit jvm, long and double assignments are also atomic.
本気ですか?コンパイルされたコード用だと思いますが、インタープリターコードはどうですか?おそらくあなたは正しいですが、保証はありますか?
Javaでは、32ビット以下の量の読み取りと書き込みはアトミックであることが保証されています。
アトミックとは、各アクションが1つのステップで実行され、中断できないことを意味します。したがって、マルチスレッドアプリケーションがある場合、読み取り操作と書き込み操作はスレッドセーフであり、同期させる必要はありません。
たとえば、次のコードはスレッドセーフです。
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
考え思われるlong値の割り当てはAtomicLong.javaで、この方法に基づいて、アトミックであることを。
public final void set(long newValue) {
value = newValue;
}
同期がないことに注意してください。
value
。ですvolatile
。
value
でvolatile
の割り当てがありませんvalue
アトミック、それは単に避け、「公開」の問題を。
volatile
とdoubleへの割り当てはアトミックであることが保証されています:java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7