モジュール java.base

クラスAtomicIntegerFieldUpdater<T>

java.lang.Object
java.util.concurrent.atomic.AtomicIntegerFieldUpdater<T>
型パラメータ:
T - 更新可能なフィールドを保持するオブジェクトの型

public abstract class AtomicIntegerFieldUpdater<T>
extends Object
指定されたクラスの指定されたvolatile intフィールドの原子更新が可能な、リフレクション・ベースのユーティリティです。 このクラスは、同一ノードの複数フィールドが独立して原子更新の対象になる原子データ構造で使用する目的で設計されています。

このクラス内のcompareAndSetメソッドの保証は、ほかの原子クラス内のそれよりも弱いことに留意してください。 このクラスは、フィールドの使用すべてが原子アクセスに適していることを保証できないため、同じアップデータでのcompareAndSetおよびsetのほかの呼出しに関してのみ原子性を保証できます。

newUpdater(java.lang.Class<U>, java.lang.String)に渡されたクラスのインスタンスでない型Tのパラメータのオブジェクト引数がスローされClassCastExceptionになります。

導入されたバージョン:
1.5
  • コンストラクタのサマリー

    コンストラクタ
    修飾子 コンストラクタ 説明
    protected AtomicIntegerFieldUpdater()
    サブクラスにより使用される、何も行わないprotectedコンストラクタ。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    int accumulateAndGet​(T obj, int x, IntBinaryOperator accumulatorFunction)
    このアップ・データによって管理される指定されたオブジェクトのフィールドを、現在および指定された値に指定された関数を適用した結果で更新し、更新された値を返すことを原子的に更新します。
    int addAndGet​(T obj, int delta)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値に、指定された値を原子的に追加します。
    abstract boolean compareAndSet​(T obj, int expect, int update)
    「現在の値==予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。
    int decrementAndGet​(T obj)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ減分します。
    abstract int get​(T obj)
    このアップデーターによって管理される指定されたオブジェクトのフィールドに保持されている現在の値を返します。
    int getAndAccumulate​(T obj, int x, IntBinaryOperator accumulatorFunction)
    指定された関数を現在の値と指定された値に適用して前の値を返す結果で、このアップ・データによって管理される指定されたオブジェクトのフィールドを非アクティブに更新します。
    int getAndAdd​(T obj, int delta)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値に、指定された値を原子的に追加します。
    int getAndDecrement​(T obj)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ減分します。
    int getAndIncrement​(T obj)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ増分します。
    int getAndSet​(T obj, int newValue)
    このアップデータにより管理される指定されたオブジェクトのフィールドを指定された値に原始的に設定し、以前の値を返します。
    int getAndUpdate​(T obj, IntUnaryOperator updateFunction)
    このアップ・データで管理されている指定されたオブジェクトのフィールドを、指定された関数を適用した結果で元に戻し、前の値を返すようにアトミックに更新します。
    int incrementAndGet​(T obj)
    このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ増分します。
    abstract void lazySet​(T obj, int newValue)
    このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に最終的に設定します。
    static <U> AtomicIntegerFieldUpdater<U> newUpdater​(Class<U> tclass, String fieldName)
    指定されたフィールドを持つオブジェクトのアップデータを作成して返します。
    abstract void set​(T obj, int newValue)
    このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に設定します。
    int updateAndGet​(T obj, IntUnaryOperator updateFunction)
    このアップ・データによって管理される指定されたオブジェクトのフィールドを、指定された関数を適用した結果で自動的に更新し、更新された値を返します。
    abstract boolean weakCompareAndSet​(T obj, int expect, int update)
    「現在の値==予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • AtomicIntegerFieldUpdater

      protected AtomicIntegerFieldUpdater()
      サブクラスにより使用される、何も行わないprotectedコンストラクタ。
  • メソッドの詳細

    • newUpdater

      public static <U> AtomicIntegerFieldUpdater<U> newUpdater​(Class<U> tclass, String fieldName)
      指定されたフィールドを持つオブジェクトのアップデータを作成して返します。 Class引数は、リフレクト型とジェネリック型の一致をチェックするために必要です。
      型パラメータ:
      U - tclassのインスタンスの型
      パラメータ:
      tclass - フィールドを保持するオブジェクトのクラス
      fieldName - 更新するフィールドの名前
      戻り値:
      アップデータ
      例外:
      IllegalArgumentException - フィールドが揮発性の整数型ではない場合
      RuntimeException - クラスにフィールドが含まれないかクラスの型が不正な場合、あるいは、呼出し元がJava言語アクセス制御に従ってフィールドにアクセスできない場合は、入れ子にされたリフレクション・ベースの例外がスローされる。
    • compareAndSet

      public abstract boolean compareAndSet​(T obj, int expect, int update)
      「現在の値==予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。 このメソッドは、compareAndSetおよびsetに対するほかの呼出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。
      パラメータ:
      obj - 条件付きでフィールドを設定するオブジェクト
      expect - 予想される値
      update - 新しい値
      戻り値:
      成功した場合はtrue
    • weakCompareAndSet

      public abstract boolean weakCompareAndSet​(T obj, int expect, int update)
      「現在の値==予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。 このメソッドは、compareAndSetおよびsetに対するほかの呼出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。

      この操作は誤って失敗する可能性があり、順序付けの保証は提供されないため、compareAndSetのかわりに適したものになることはほとんどありません。

      パラメータ:
      obj - 条件付きでフィールドを設定するオブジェクト
      expect - 予想される値
      update - 新しい値
      戻り値:
      成功した場合はtrue
    • set

      public abstract void set​(T obj, int newValue)
      このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に設定します。 この操作は、後続のcompareAndSetの呼出しに関しては、揮発性ストアとして動作することが保証されています。
      パラメータ:
      obj - フィールドを設定するオブジェクト
      newValue - 新しい値
    • lazySet

      public abstract void lazySet​(T obj, int newValue)
      このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に最終的に設定します。
      パラメータ:
      obj - フィールドを設定するオブジェクト
      newValue - 新しい値
      導入されたバージョン:
      1.6
    • get

      public abstract int get​(T obj)
      このアップデーターによって管理される指定されたオブジェクトのフィールドに保持されている現在の値を返します。
      パラメータ:
      obj - フィールドを取得するオブジェクト
      戻り値:
      現行値
    • getAndSet

      public int getAndSet​(T obj, int newValue)
      このアップデータにより管理される指定されたオブジェクトのフィールドを指定された値に原始的に設定し、以前の値を返します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      newValue - 新しい値
      戻り値:
      前の値
    • getAndIncrement

      public int getAndIncrement​(T obj)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ増分します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      戻り値:
      前の値
    • getAndDecrement

      public int getAndDecrement​(T obj)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ減分します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      戻り値:
      前の値
    • getAndAdd

      public int getAndAdd​(T obj, int delta)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値に、指定された値を原子的に追加します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      delta - 追加する値
      戻り値:
      前の値
    • incrementAndGet

      public int incrementAndGet​(T obj)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ増分します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      戻り値:
      更新された値
    • decrementAndGet

      public int decrementAndGet​(T obj)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値を原子的に1だけ減分します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      戻り値:
      更新された値
    • addAndGet

      public int addAndGet​(T obj, int delta)
      このアップデータが管理する指定されたオブジェクトのフィールドの現在値に、指定された値を原子的に追加します。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      delta - 追加する値
      戻り値:
      更新された値
    • getAndUpdate

      public final int getAndUpdate​(T obj, IntUnaryOperator updateFunction)
      このアップ・データで管理されている指定されたオブジェクトのフィールドを、指定された関数を適用した結果で元に戻し、前の値を返すようにアトミックに更新します。 関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      updateFunction - 副作用のない関数
      戻り値:
      前の値
      導入されたバージョン:
      1.8
    • updateAndGet

      public final int updateAndGet​(T obj, IntUnaryOperator updateFunction)
      このアップ・データによって管理される指定されたオブジェクトのフィールドを、指定された関数を適用した結果で自動的に更新し、更新された値を返します。 関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      updateFunction - 副作用のない関数
      戻り値:
      更新された値
      導入されたバージョン:
      1.8
    • getAndAccumulate

      public final int getAndAccumulate​(T obj, int x, IntBinaryOperator accumulatorFunction)
      指定された関数を現在の値と指定された値に適用して前の値を返す結果で、このアップ・データによって管理される指定されたオブジェクトのフィールドを非アクティブに更新します。 関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。 関数は、現在の値を第1引数とし、指定された更新値を第2引数として適用されます。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      x - 更新値
      accumulatorFunction - 2つの引数を取る、副作用のない関数
      戻り値:
      前の値
      導入されたバージョン:
      1.8
    • accumulateAndGet

      public final int accumulateAndGet​(T obj, int x, IntBinaryOperator accumulatorFunction)
      このアップ・データによって管理される指定されたオブジェクトのフィールドを、現在および指定された値に指定された関数を適用した結果で更新し、更新された値を返すことを原子的に更新します。 関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。 関数は、現在の値を第1引数とし、指定された更新値を第2引数として適用されます。
      パラメータ:
      obj - フィールドを取得および設定するオブジェクト
      x - 更新値
      accumulatorFunction - 2つの引数を取る、副作用のない関数
      戻り値:
      更新された値
      導入されたバージョン:
      1.8