ホームページ > Java > &#&チュートリアル > Java ではアトミック オペレーションがデフォルトではないのはなぜですか?

Java ではアトミック オペレーションがデフォルトではないのはなぜですか?

DDD
リリース: 2024-11-30 10:16:11
オリジナル
725 人が閲覧しました

Why Aren't Atomic Operations the Default in Java?

アトミック操作がデフォルトではない理由

Java では、インクリメント演算子 (i ) はアトミックではありません。アトミック性により、次の操作が開始される前に操作が完全に完了することが保証され、一貫性のある信頼性の高い結果が保証されます。ただし、インクリメント演算子のすべてのユースケースでアトミック性が必要なわけではありません。

マルチスレッド環境でカウンターをインクリメントする一般的なシナリオを考えてみましょう。アトミック性には共有変数への排他的アクセスが必要であるため、i を使用すると、ソフトウェア レベルとハードウェア レベルの両方でコストのかかる同期メカニズムが必要になります。

アトミック性がすべてのインクリメント操作に強制されると、アトミック性が適用されているシナリオでは重大なオーバーヘッドが発生します。必要ありません。たとえば、シングルスレッドのコンテキストでは、同じ変数を同時にインクリメントしようとする 2 つのスレッドの競合状態が問題にならないため、非効率なアトミック インクリメントは不要になります。

さらに、i アトミックにすると壊れてしまいます。 C や C などの一般的なプログラミング言語との互換性。さらに、Java では非アトミック形式のインクリメント (i = i 1) を使用する必要があるため、これらの言語から移行するプログラマにとっては混乱が生じる可能性があります。

アセンブリ命令レベルであっても、アトミック インクリメントは操作にはパフォーマンス上の欠点があることがよくあります。たとえば、x86 アーキテクチャでは、インクリメント命令をアトミックにするために特別な「ロック プレフィックス」が必要ですが、これにより追加のオーバーヘッドが発生します。

したがって、明示的なアトミック同期が存在しない場合、i は非アトミックのままになります。 Java での操作により、アトミック性が厳密な要件ではないシナリオでのパフォーマンスの最適化が可能になります。

以上がJava ではアトミック オペレーションがデフォルトではないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート