Javaの原子性クラス実装の原理は?

Java のアトミック類は CAS (Compare and Swap) 操作を利用している。

CASはメモリー位置V、古い期待値A、新しい値Bの三つの引数を持つ lạc quan ロック機能です。CAS操作はまずメモリー位置Vの値と期待値Aを比較し、等しい場合、メモリー位置Vの値を新しい値Bに更新します。そうでない場合、操作は失敗します。CAS操作は原子操作であり、1つのスレッドがCAS操作を行っている間、他のスレッドはそのメモリー位置を修正することはできません。

Javaの原子クラスは、CAS操作を用いて、原子的な処理を実現しています。複数のスレッドが同じ変数に対する処理を伴う場合に、原子クラスを利用することで、処理の原子性が保証されます。原子クラスのメソッドは、すべて原子的です。例えば、 AtomicIntegerクラスのincrementAndGetメソッドは、メソッド内部でCAS操作を行い、原子性を保持しています。つまり、変数の値を取得し、その後1を加算してから、CAS操作を利用して、新しい値をメモリに書き戻します。

アトミック型を使用することで、ロックをかけるためのオーバーヘッドを回避して、並列処理性能を向上できます。ただし、複合演算や複数スレッド間の同期を確保する必要があるようなすべての処理を、アトミック型で実現できるわけではないことに注意する必要があります。そのような場合は、依然としてロックメカニズムを使用する必要があります。

bannerAds