アトミック操作とはJava同時実行APIのアトミッククラスとは何ですか?

質問者:Ximena Wrangell |最終更新日:2020年6月16日
カテゴリ:テクノロジーおよびコンピューティングデータベース
4.7 / 5 (720ビュー。42投票)
Java Concurrency APIのアトミッククラスとは何ですか?アトミックパッケージは、単一変数に対するアトミック操作をサポートするクラスを定義します。すべてのクラスには、揮発性変数と同様に読み取りおよび書き込みを行うためのgetメソッドとsetメソッドがあります。

同様に、Javaの不可分操作とは何でしょうか。

アトミック操作は、他の事業から干渉の可能性なしに、単一の作業単位として実行される動作です。 Java言語仕様では、変数の読み取りまたは書き込みが不可分操作であることが保証されています(変数の型がlongまたはdoubleでない場合)。

また、アトミック操作を同期する必要がありますか?アトミックアクションはインターリーブできないため、スレッドの干渉を恐れずに使用できます。ただし、これにより、メモリ整合性エラーが発生する可能性があるため、アトミックアクションを同期する必要がすべてなくなるわけではありません。これは、揮発性変数への変更が常に他のスレッドに表示されることを意味します。

これを考慮して、不可分操作とは何ですか?

並行プログラミングにおける不可分操作は、他のプロセスから完全に独立して実行されるプログラム操作です。不可分操作は、多くの最新のオペレーティングシステムや並列処理システムで使用されています。

AtomicIntegerとは何ですか?いつ使用しますか?

その中で、 AtomicIntegerクラスは、アトミックに更新できるようにするint値のラッパークラスです。このクラスは便利なメソッドを提供し、その一部を以下のコードスニペットに示します。 AtomicIntegerの最も一般的な使用法は、異なるスレッドによって同時にアクセスされるカウンターを処理することです。

34関連する質問の回答が見つかりました

インクリメントはアトミックですか?

4つの答え。 X86のincrement -memorymachine命令は、LOCKプレフィックスを付けて使用する場合にのみアトミックです。 CおよびC ++のx ++には、アトミックな動作はありません。 「大きな値」(たとえば、多倍長整数)をインクリメントする場合は、セマフォなどの標準のロックメカニズムを使用してインクリメントする必要があります。

ExecutorServiceスレッドは安全ですか?

ExecutorServiceは、すべての実装がスレッドセーフであることを義務付けたり、保証したりすることはありません。また、インターフェイスであるため、これはできません。これらのタイプのコントラクトは、Javaインターフェースの範囲外です。ただし、ThreadPoolExecutorは両方とも、スレッドセーフであると明確に文書化されています

Javaで揮発性が使用されるのはなぜですか?

Javaの揮発性キーワード。 Volatileキーワードは、さまざまなスレッドによって変数の値を変更するために使用されます。また、クラスをスレッドセーフにするためにも使用されます。 volatileキーワードは変数の値をキャッシュせず、常にメインメモリから変数を読み取ります。

intはJavaでアトミックですか?

Javaプログラミング言語のメモリモデルの目的上、不揮発性のlong値またはdouble値への1回の書き込みは、32ビットの半分ごとに1つずつ、2つの別々の書き込みとして扱われます。これは、intへの書き込みがアトミックであることを意味しているようです。

ExecutorServiceを使用するにはどうすればよいですか?

最初に、 ExecutorServiceがExecutors newFixedThreadPool()ファクトリメソッドを使用して作成されます。これにより、タスクを実行する10個のスレッドを持つスレッドプールが作成されます。次に、Runnableインターフェースの匿名実装がexecute()メソッドに渡されます。

Java volatileとは何ですか?

基本的に、 volatileは、変数の値がさまざまなスレッドによって変更されることを示すために使用されます。揮発性のJava変数を宣言するということは、次のことを意味します。変数へのアクセスは、同期されたブロックに囲まれ、それ自体で同期されているかのように機能します。

Javaでのスレッドセーフとは何ですか?

スレッド-安全性またはスレッド- Java安全なコードを安全に使用または同時またはマルチスレッド環境で共有し、期待どおりに動作しますすることができ、コードを指します。並行環境でのコントラクトとは異なる動作をする可能性のあるコード、クラス、またはオブジェクトは、スレッドセーフではありません。

Javaのワーカースレッドとは何ですか?

ワーカースレッドで構成される同時使用スレッドプール。この種のスレッドは、実行するRunnableおよびCallableタスクとは別に存在し、複数のタスクを実行するためによく使用されます。ワーカースレッドは通常のスレッドですが、動作するRunnableクラスまたはCallableクラスとは別に存在します。

Cの原子変数とは何ですか?

Cの原子変数変数を「アトミック」にするために、コンパイラーはその変数に対する操作のセットがアトミックになるようにしますが、通常、これらの操作は単一の演算子または関数呼び出しに制限されます。

アトミック操作はどのように機能しますか?

最近のCPUの大部分では、影響を受けるメモリアドレスをCPUのキャッシュにロックすることで、アトミック操作が機能します。 CPUは、キャッシュ内のメモリアドレスを排他的に取得し、操作が完了するまで、他のCPUがそのアドレスを取得または共有することを許可しません。

アトミック書き込みとは何ですか?

コンピュータサイエンスでは、読み取り-変更-書き込みは、メモリ位置の読み取りと新しい値の書き込みの両方を行う不可分操作(テストアンドセット、フェッチアンドアッド、コンペアアンドスワップなど)のクラスです。同時に、完全に新しい値または前の値の関数のいずれかを使用します。

アトミックメモリとは何ですか?

アトミックストレージ(アトミックメモリと呼ばれることもあります)は、個々のレベルでビットとアトムを処理するコンピュータデータストレージへのナノテクノロジーアプローチです。表面はCD(コンパクトディスク)の表面に似ていますが、スケールはマイクロメートルではなくナノメートルであり、100万倍のストレージ密度が得られます。

アトミックC ++とは何ですか?

アトミックアトミック型は、アクセスによってデータ競合が発生しないことが保証されている値をカプセル化する型であり、異なるスレッド間でメモリアクセスを同期するために使用できます。このヘッダーは、自己完結型クラスのアトミック型のすべての機能を実装する2つのC ++クラス、 atomicとatomic_flagを宣言します。

アトミックアップデートとは何ですか?

Atomic Updatesは、Solr 4.0で追加された機能であり、ドキュメントレベルではなくフィールドレベルで更新できます(以前のバージョン)。これは、更新されていないフィールド値を使用してドキュメント全体をSolrに送信しなくても、個々のフィールドを更新できることを意味します。

アトミックおよび非アトミックとは何ですか?

アトミックとは、1つのスレッドのみが変数(静的タイプ)にアクセスすることを意味します。 Atomicはスレッドセーフですが、低速です。非アトミックとは、複数のスレッドが変数(動的タイプ)にアクセスすることを意味します。 Nonatomicはスレッドセーフではありませんが、高速です。

Javaのアトミックおよび非アトミック操作とは何ですか?

Javaでのアトミックおよび非アトミック操作不可分操作は1つのステップで行われます。変数の読み取りおよび書き込み操作と同様です。アトミック操作を中断することはできず、Javaは読み出しおよび書き込み動作は以下であるか、または32ビットに等しいすべての変数の原子であり、それらは、スレッドセーフです。

割り当てはアトミックですか?

3つの答え。まず第一に、仕様がそう言っているので、参照割り当てアトミックです。さらに、64ビット参照は通常64ビットアーキテクチャでのみ使用され、アトミック64ビット割り当ては無料で提供されるため、JVM実装者がこの制約を満たすのに障害はありません。