Javaのどのような操作はアトミックと見なされますか?Javaのどのような操作がアトミックであると考えられていますか?
答えて
- 参照
- のすべての割り当てvolatile変数
- のすべての割り当て
- longとdouble以外のプリミティブ型のすべての割り当てjava.concurrent.Atomicのすべての操作*クラス
多分もっと何か。 jlsを見てください。
コメントに記載されているように、アトミック性は可視性を意味するものではありません。したがって、別のスレッドが部分的に書かれたint
を見ないことが保証されている間は、新しい値は決して見えないかもしれません。
ロングとダブルの操作は共通の64ビットCPU atomic as wellにありますが、保証はありません。このfeature requestも参照してください。
Javaでは、32ビット以下の読み書きはアトミックであることが保証されています。
アトミックとは、各アクションが1つのステップで実行され、中断できないことを意味します。したがって、マルチスレッドアプリケーションを使用する場合、読み書き操作はスレッドセーフであり、同期化する必要はありません。
public final void set(long newValue) {
value = newValue;
}
注:それははAtomicLong.javaで、この方法に基づいて、long型の割り当てがアトミックですを思わ
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
..値が常に正確に元の値か設定値のどちらかになるという意味では、スレッドセーフです。ほとんどの最新の値は、必ずしも必然的に「揮発性」または「同期」の欠如のために他のスレッドには見えません。 –
+1に@MikkoWilkmanが言います。このコードは、メモリの可視性の観点からはスレッドセーフではないため、使用しないでください。 –
:たとえば
は、次のコードは、スレッドセーフであります同期がない。
'value'の宣言を見てください。それは「揮発性」です。 – maaartinus
'value'は' volatile'で、 'value'アトミックな値を代入しません。単に"発行 "問題を避けるだけです。 –
両方とも実行します。[JLS、セクション17.7](http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7):volatile longの書き込みと読み取り二重の値は常にアトミックです。 – maaartinus
- 1. atomic.hからの操作は非アトミックなようです
- 2. ネストされたアトミック操作はアトミックであることが保証されていますか?
- 3. Gitのデータベース操作またはアトミック操作のACIDプロパティに使用されるアトミックな用語はなぜ、どのようにコミットされますか?
- 4. memory_order_seq_cstは非アトミック操作とどのように同期しますか?
- 5. Linuxで特定の操作(またはシステムコール)がアトミックであるかどうかを確認するにはどうすればよいですか?
- 6. 何の操作アトミック操作
- 7. UnitOfWorkのパターンとアトミック操作
- 8. OpenMPとC:この操作をアトミックにする必要がありますか?
- 9. どのようなコードが例外安全と考えられていますか?
- 10. ARMのアトミック操作
- 11. CUDAのアトミック操作
- 12. "アプリケーションがセキュリティポリシーで許可されていない操作を実行しようとしました。"考えられる信頼の問題?
- 13. 単純なJavaコード動作しないであろうことを考えるとjavaの
- 14. Memcached - GET操作とSET操作はアトミックですか?
- 15. 私のスレッドは作成されていないようです...どんな考えですか?
- 16. エンティティBeanがなぜ貧血であると考えられるのですか?
- 17. jQuery.ajaxはどのような回答を "成功"と考えていますか?
- 18. ScalaにJava Streamの "peek"操作のようなものがありますか?
- 19. さらに多くのCPUが追加されるとアトミック操作が遅くなりますか?
- 20. マップサブクラスのいずれかにアトミックな「空の場合にセット」操作がありますか?
- 21. どのようにピボットクラウドファウンドリーopsmanをJava RESTfulから操作するのですか
- 22. ループ内でのforkが考えられないようにする
- 23. Javaコンパイラはbyte []がStringであると考えます
- 24. jQueryの.dataメソッドがこのように動作するのはなぜですか? (考えられるバグ?)
- 25. CUDAアトミック操作のリスト
- 26. docker-containerやkubernetes-podが使い捨てであると考えられるのはなぜですか?
- 27. エンティティプログラミングはデータベースの考え方をどのように変えていますか?
- 28. Javaスレッドオブジェクトの操作が反映され、どのように?
- 29. iosがローカル通知をブロックすることが有害であると考えられていますか?
- 30. Routeにはコントローラが2つあると考えられます。
「volatile」longとdoubleは、アトミックであることが保証されています。http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7 –
また、操作はアトミックであるため、特別な注意が払われない限り、マルチスレッドアプリケーションでこれらの操作の可視性が保証されない場合があります(詳細は* way *で説明しています)。 – nos
64ビットjvm、longおよびdouble assigments –