モジュール java.base
パッケージ java.lang.invoke

クラスVarHandle

java.lang.Object
java.lang.invoke.VarHandle
すべての実装されたインタフェース:
Constable

public abstract class VarHandle extends Object implements Constable
VarHandleは、変数に対する、あるいはパラメータを用いて指定される変数の一群に対する、動的に強く型付けされた参照です。それら変数には、staticなフィールド、非staticなフィールド、配列の要素、ヒープの外側にあるデータ構造のコンポーネントなどが含まれます。 このような変数に対して、様々な「アクセス・モード」の元でのアクセスがサポートされています。「アクセス・モード」には、通常の読み取り/書き込みアクセス、volatileな読み取り/書き込みアクセス、compare-and-setなどが含まれます。

VarHandlesは不変であり、可視的な状態を持ちません。 VarHandlesをユーザーがサブクラス化することはできません。

VarHandleは、次の型から構成されます:

  • 変数型 T、このVarHandleによって参照されるすべての変数の型。
  • 座標型のリスト CT1, CT2, ..., CTn、このVarHandleによって参照される変数の場所を指し示す、一連の「座標表現」の型。
変数および座標型は、プリミティブ型または参照型であり、Classオブジェクトで表されます。 座標型のリストは空の場合もあります。

どのような変数型および座標型のリストの組み合わせがサポートされるかについては、VarHandleを生成する、言い換えるとlookupする、ファクトリ・メソッドのドキュメントで文書化されます。

各アクセス・モードは、アクセス・モード用に名づけられた「シグネチャ・ポリモーフィック」メソッドである、1つの「アクセス・モード方式」と関連付けられます。 VarHandleインスタンスでアクセス・モード・メソッドが呼び出されると、呼び出しの最初の引数は、変数にアクセスするオブジェクトを正確に示す座標式です。 呼び出しの後続の引数は、アクセス・モードにとって重要な値を表します。 たとえば、さまざまなcompare-and-setまたはcompare-and-exchangeアクセス・モードでは、期待値および新しい値に対して2つの後続の引き数が必要です。

アクセス・モード・メソッドの呼び出しに対するアリティと引数の型は静的にチェックされません。 代わりに、各アクセス・モード・メソッドは、MethodTypeのインスタンスとして表されるaccess mode typeを指定します。MethodTypeは、引数が動的にチェックされる一種のメソッド・シグネチャとして機能します。 アクセス・モード型は、VarHandleインスタンスの座標型とアクセス・モードにとって重要な値の型に関して仮のパラメータ型を提供します。 また、アクセス・モードの型は、VarHandleインスタンスの変数型の観点からしばしば返される型を返します。 VarHandleインスタンスでアクセス・モード・メソッドが呼び出されるときは、呼び出しサイトのシンボリック型記述子、呼び出しの引数の実行時の型、および戻り値の実行時の型は、アクセス・モード・タイプで与えられた型にmatchする必要があります。 一致が失敗すると、実行時例外がスローされます。 たとえば、アクセス・モード・メソッドcompareAndSet(java.lang.Object...)は、レシーバが座標型がCT1, ..., CTnおよび変数型がTのVarHandleインスタンスである場合、そのアクセス・モード型は(CT1 c1, ..., CTn cn, T expectedValue, T newValue)booleanであることを指定します。 VarHandleインスタンスが配列要素にアクセスでき、その座標型がString[]intで、変数の型がStringであるとします。 このVarHandleインスタンスのcompareAndSetのアクセス・モード型は(String[] c1, int c2, String expectedValue, String newValue)booleanになります。 このようなVarHandleインスタンスは、array factory methodによって生成され、次のように配列要素にアクセスします:

 
 String[] sa = ...
 VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
 boolean r = avh.compareAndSet(sa, 10, "expected", "new");
 

アクセス・モードは、アトミック性と一貫性のプロパティを制御します。 「プレーン」 read (get)およびwrite (set)アクセスは、参照および最大32ビットのプリミティブ値のビット単位のアトミックであることが保証され、実行スレッド以外のスレッドに関しては観察可能な順序制約がありません。 「不透明」演算は、同じ変数へのアクセスに関してビット単位のアトムであり、コヒーレントに順序付けられます。 Opaqueプロパティに従うことに加えて、「獲得」モードの読み込みとそれに続くアクセスは、「リリース」モードの書き込みと以前のアクセスの一致後に順序付けられます。 AcquireおよびReleaseプロパティに従うことに加えて、すべての「揮発性」操作は、互いに完全に順序付けられています。

アクセス・モードは、次のカテゴリに分類されます:

VarHandleインスタンスを生成またはlookupするファクトリ・メソッドは、サポートされているアクセス・モードのセットを文書化します。これには、変数の型と変数が読み取り専用であるかどうかに基づくドキュメント化の制限も含まれます。 アクセス・モードがサポートされていない場合、対応するアクセス・モード・メソッドは呼び出し時にUnsupportedOperationExceptionをスローします。 ファクトリ・メソッドは、アクセス・モード・メソッドによってスローされる可能性がある、宣言されていない例外をすべて文書化する必要があります。 getアクセス・モードはすべてのVarHandleインスタンスでサポートされており、対応するメソッドは決してUnsupportedOperationExceptionをスローしません。 VarHandleが読み取り専用変数(たとえば、finalフィールド)を参照すると、書き込み、アトミック更新、数値アトミック更新、およびビット単位アトミック更新アクセス・モードはサポートされず、対応するメソッドはUnsupportedOperationExceptionをスローします。 読み取り/書き込みアクセス・モードgetsetを除いて、(サポートされている場合)は参照型とすべてのプリミティブ型に対してアトム・アクセスを提供します。 ファクトリ・メソッドのドキュメントで特に指定しない限り、アクセス・モードgetおよびset (サポートされている場合)は、32ビット・プラットフォームのlongおよびdoubleを除いて、参照型およびすべてのプリミティブ型に対してアトミック・アクセスを提供します。

アクセス・モードは、変数の宣言サイトで指定されたメモリー順序付け効果をオーバーライドします。 たとえば、getアクセス・モードを使用してフィールドにアクセスするVarHandleは、そのフィールドがvolatileと宣言されていても、指定された「アクセス・モード」としてフィールドにアクセスします。 混在アクセスが行われるときは、Javaメモリー・モデルが驚くべき結果をもたらす可能性があるため、細心の注意を払う必要があります。

さまざまなアクセス・モードで変数へのアクセスをサポートすることに加えて、メモリー・フェンス・メソッドと呼ばれる一連の静的メソッドは、メモリーの順序付けをきめ細かく制御するために用意されています。 Java言語仕様では、ロック、volatileフィールド、またはVarHandlesの使用などの制約が発生した場合に、他のスレッドがプログラムのソース・コードとは異なる順序で実行されているかのように操作を監視することができます。 静的メソッドfullFenceacquireFencereleaseFenceloadLoadFence、およびstoreStoreFenceは、制約を課すためにも使用できます。 特定のアクセス・モードの場合のように、その仕様は、"reorderings"の欠如の点で表現されています-- フェンスが存在しない場合に発生する可能性のある観察可能な順序付け効果。 アクセス・モード・メソッドとメモリー・フェンス・メソッドの仕様のより正確な表現は、将来のJava言語仕様の更新に伴います。

アクセス・モード・メソッドの呼び出しのコンパイル

アクセス・モード・メソッドを指定するJavaメソッド呼び出し式は、Javaソース・コードからVarHandleを呼び出すことができます。 ソース・コードの観点からは、これらのメソッドは任意の引数を取ることができ、そのポリモーフィックの結果(表現されていれば)は任意の戻り型にキャストできます。 正式には、これはアクセス・モード・メソッドに可変アリティ Object引数とObject戻り値の型(戻り値の型がポリモーフィックである場合)を与えることによって実現されますが、これらの呼び出しの自由を直接JVM実行スタックに接続する「シグネチャ・ポリモーフィック」という追加の品質があります。

バーチャル・メソッドでは通常通り、アクセス・モード・メソッドへのソース・レベルの呼び出しはinvokevirtual命令にコンパイルされます。 通常とは異なる点として、コンパイラは実際の引数の型を記録する必要があり、引数に対するメソッド呼出し変換を実行することができません。 代わりに、自身の変換されていない型に従ってスタックにプッシュする命令を生成する必要があります。 VarHandleオブジェクト自体は、引数の前にスタックにプッシュされます。 次にコンパイラは、引数と戻り値の型を記述するシンボリック型記述子でアクセス・モード・メソッドを呼び出すinvokevirtual命令を生成します。

完全なシンボリック型記述子を発行するには、コンパイラは戻り値の型(ポリモーフィックの場合)も決定する必要があります。 これは、メソッド呼び出し式があればキャストに基づいています。呼び出しが式の場合はObject、呼び出しが文の場合はvoidになります。 キャスト先はプリミティブ型でもかまいません(ただしvoidは不可)。

特殊なケースとして、キャストされていないnull引数にはjava.lang.Voidのシンボリック型記述子が与えられます。 Void型の参照はnull参照以外には存在しないため、型Voidのあいまいさが問題になることはありません。

アクセス・モード・メソッドの呼び出しの実行

invokevirtual命令が初めて実行されるとき、命令内の名前を記号的に解決し、メソッド呼び出しが静的に合法であることを確認することによってリンクされます。 これは、アクセス・モード・メソッドへの呼び出しにも適用されます。 この場合、コンパイラによって発行されたシンボリック型記述子は、正しい構文がチェックされ、その中に含まれる名前が解決されます。 したがって、アクセス・モード・メソッドを呼び出すinvokevirtual命令は、シンボリック型記述子が構文的に整形式であり、型が存在する限り、常にリンクします。

リンク後にinvokevirtualが実行されると、受信VarHandleアクセス・モードの型がJVMによって最初にチェックされ、シンボル型記述子と一致することが確認されます。 型の一致が失敗した場合は、呼び出された個々のVarHandleに呼び出し元が呼び出すアクセス・モード・メソッドが存在しないことを意味します。

アクセス・モード・メソッドの起動は、デフォルトではMethodHandle.invoke(java.lang.Object...)の起動と同様に動作し、受信側メソッド・ハンドルはVarHandleインスタンスを先頭の引数として受け入れます。 より具体的には、以下は、{access-mode}がアクセス・モード・メソッド名に対応する場合です:

 
 VarHandle vh = ..
 R r = (R) vh.{access-mode}(p1, p2, ..., pN);
 
次のように動作します:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = MethodHandles.varHandleExactInvoker(
                       am,
                       vh.accessModeType(am));

 R r = (R) mh.invoke(vh, p1, p2, ..., pN)
 
(モジュロ・アクセス・モード・メソッドは、Throwableのスローを宣言しません)。 これは、次の操作に相当します。
 
 MethodHandle mh = MethodHandles.lookup().findVirtual(
                       VarHandle.class,
                       "{access-mode}",
                       MethodType.methodType(R, p1, p2, ..., pN));

 R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
 
目的のメソッドの型がシンボリック型記述子で、MethodHandle.invokeExact(java.lang.Object...)が実行されます。ターゲットの呼び出しの前に、ハンドルは必要に応じて参照キャストを適用し、asType (MethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType)も参照してください)の場合と同様にボックス、アンボックス、または拡大プリミティブ値を適用します。 このような動作は、より簡潔には次のようになります:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = vh.toMethodHandle(am);

 R r = (R) mh.invoke(p1, p2, ..., pN)
 
この場合、メソッド・ハンドルはVarHandleインスタンスにバインドされています。

VarHandle呼出し動作は、アクセス・モード・メソッドの呼出しがMethodHandle.invokeExact(java.lang.Object...)の呼出しのように動作するように調整できます。(withInvokeExactBehavior()を参照してください)では、受信側のメソッド・ハンドルがVarHandleインスタンスを先頭の引数として受け入れます。 より具体的には、以下は、{access-mode}がアクセス・モード・メソッド名に対応する場合です:

 
 VarHandle vh = ..
 R r = (R) vh.{access-mode}(p1, p2, ..., pN);
 
次のように動作します:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = MethodHandles.varHandleExactInvoker(
                       am,
                       vh.accessModeType(am));

 R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
 
(モジュロ・アクセス・モード・メソッドは、Throwableのスローを宣言しません)。 このような動作は、より簡潔には次のようになります:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = vh.toMethodHandle(am);

 R r = (R) mh.invokeExact(p1, p2, ..., pN)
 
この場合、メソッド・ハンドルはVarHandleインスタンスにバインドされています。

呼出しのチェック

典型的なプログラムでは、VarHandleアクセス・モードの型マッチングは通常成功します。 しかし、マッチが失敗すると、JVMはWrongMethodTypeExceptionをスローします。

したがって、静的型付きプログラムでリンケージ・エラーとして表示される可能性のあるアクセス・モード型の不一致は、VarHandlesを使用するプログラム内の動的WrongMethodTypeExceptionとして表示されます。

アクセス・モード型には"live" Classオブジェクトが含まれているため、メソッド型のマッチングには型名とクラス・ローダーの両方が考慮されます。 したがって、VarHandle VHが1つのクラス・ローダーL1で作成され、別のL2で使用されても、VarHandleアクセス・モードのメソッド呼び出しは、L2で解決された呼び出し元のシンボリック型記述子が元の呼び出しメソッド・メソッドのシンボリックL1で解決されたような型の記述子。 L1の解像度は、VHが作成され、そのアクセス・モード型が割り当てられているときに発生し、L2の解像度は、invokevirtual命令がリンクされているときに発生します。

タイプ記述子チェックとは別に、変数にアクセスするためのVarHandles機能は制限されません。 VarHandleが、その変数にアクセスできるクラスによって非公開変数に形成されている場合、結果のVarHandleは、参照を受け取った呼び出し元によって、どの場所でも使用できます。

リフレクション・メソッドが呼び出されるたびにアクセスが検査されるCore Reflection APIとは異なり、VarHandleアクセス・チェックは「VarHandleが作成されたとき」によって実行されます。 したがって、非公開変数へのVarHandlesまたは非公開クラスの変数へのVarHandlesは、一般に秘密にする必要があります。 信頼できないコードがそれらを使用しても問題が発生しない場合を除き、それらを信頼できないコードに渡さないようにしてください。

VarHandleの作成

Javaコードは、そのコードにアクセス可能なすべてのフィールドに直接アクセスするVarHandleを作成できます。 これは、MethodHandles.Lookupと呼ばれる機能に基づいた反射的なAPIを介して行われます。 たとえば、非静的フィールドのVarHandleはLookup.findVarHandleから取得できます。 また、Core Reflection APIオブジェクトLookup.unreflectVarHandleからの変換メソッドもあります。

保護されたフィールド・メンバーへのアクセスは、アクセスするクラスまたはそのサブクラスのレシーバのみに制限され、アクセスするクラスは、保護されたメンバーを定義するクラスのサブクラス(パッケージ兄弟)でなければなりません。 VarHandleが現在のパッケージの外の宣言クラスの保護された非静的フィールドを参照する場合、受信側の引数はアクセスするクラスの型に絞り込まれます。

VarHandlesとCore Reflection APIの相互運用

Lookup APIのファクトリ・メソッドを使用すると、Core Reflection APIオブジェクトで表されるフィールドはすべて、動作上同等のVarHandleに変換できます。 たとえば、反射Fieldは、Lookup.unreflectVarHandleを使用してVarHandleに変換できます。 結果として得られるVarHandlesは、一般に、基礎となるフィールドへのより直接的かつ効率的なアクセスを提供します。

特別なケースとして、Core Reflection APIを使用してこのクラスのシグネチャ・ポリモーフィック・アクセス・モード・メソッドを表示すると、通常の非ポリモーフィック・メソッドとして表示されます。 Class.getDeclaredMethodで示されるそれらのリフレクション表現は、このAPIでの特殊なステータスの影響を受けません。 たとえば、Method.getModifiersでは、同様に宣言されたすべてのメソッドで必要になる修飾子ビット(この場合はnativeビットやvarargsビットなど)が厳密に報告されます。

反射されたメソッドと同様に、これらのメソッド(反射したとき)はJNI経由で直接java.lang.reflect.Method.invoke経由で、またはLookup.unreflect経由で間接的に呼び出すことができます。 しかし、そのようなリフレクション・コールは、アクセス・モード・メソッドの呼び出しにはなりません。 そのような呼出しに必要な引数(Object[]型の単一の引数)を渡してもその引数は無視され、UnsupportedOperationExceptionがスローされます。

invokevirtual命令は、任意のシンボリック型記述子の下でVarHandleアクセス・モード・メソッドをネイティブに呼び出すことができるため、このリフレクション・ビューは、バイトコードを介してこれらのメソッドの通常の提示と衝突します。 したがって、これらのネイティブ・メソッドは、Class.getDeclaredMethodによってリフレクションにより表示される場合、プレースホルダーとしてのみ見なされます。

特定のアクセス・モード型の呼び出しメソッドを取得するには、MethodHandles.varHandleExactInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType)またはMethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType)を使用します。 Lookup.findVirtual APIは、指定されたアクセス・モード・タイプのアクセス・モード・メソッドをコールするメソッド・ハンドルを返すこともでき、これはMethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType)と同様の動作をします。

VarHandlesとJavaジェネリックの相互運用

VarHandleは、Javaジェネリック型で宣言されたフィールドなどの変数に対して取得できます。 コア・リフレクションAPIと同様に、VarHandle変数型はソース・レベル型の消去から構築されます。 VarHandleアクセス・モード・メソッドが呼び出されると、その引数の型または戻り値の型の型は、ジェネリック型または型のインスタンスである可能性があります。 これが起こった場合、コンパイラは、invokevirtual命令のシンボリック型記述子を構築する際に、それらの型を対応するイレイジャで置き換えます。
導入されたバージョン:
9
関連項目:
  • メソッドの詳細

    • hasInvokeExactBehavior

      public boolean hasInvokeExactBehavior()
      このVarHandleにinvoke-exactの動作がある場合、trueを返します。
      戻り値:
      このVarHandleにinvoke-exactの動作がある場合はtrue
      導入されたバージョン:
      16
      関連項目:
    • get

      public final Object get(Object... args)
      変数が非volatileと宣言されているかのように、読み込みのメモリー・セマンティクスを持つ変数の値を返します。 通常、プレーン・リード・アクセスと呼ばれます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn)Tの形式です。

      getのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      このアクセス・モードは、すべてのVarHandleインスタンスでサポートされており、UnsupportedOperationExceptionをスローしません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の値であるシグネチャ・ポリモーフィックの結果。
      例外:
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • set

      public final void set(Object... args)
      変数の値をnewValueに設定し、変数が非volatileおよび非finalとして宣言されているかのように設定されたメモリー・セマンティクスを持つ。 通常、プレーン・ライト・アクセスと呼ばれます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)voidの形式です

      setのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.SET)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • getVolatile

      public final Object getVolatile(Object... args)
      変数がvolatileとして宣言されているかのように、読み込みのメモリー・セマンティクスを持つ変数の値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn)Tの形式です。

      getVolatileのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_VOLATILE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の値であるシグネチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • setVolatile

      public final void setVolatile(Object... args)
      変数の値をnewValueに設定し、変数がvolatileとして宣言されているかのように設定されたメモリー・セマンティクスを持つ。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)voidの形式です。

      setVolatileのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.SET_VOLATILE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドはmemory_order_seq_cstと互換性のあるメモリー順序付けエフェクトを持っています。
      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • getOpaque

      public final Object getOpaque(Object... args)
      プログラム順序でアクセスされるが、他のスレッドに関してメモリー順序付けの効果が保証されていない変数の値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn)Tの形式です。

      getOpaqueのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_OPAQUE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の値であるシグネチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • setOpaque

      public final void setOpaque(Object... args)
      プログラムの順序で変数の値をnewValueに設定しますが、他のスレッドに関してメモリーの順序付けの効果は保証されません。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)voidの形式です。

      setOpaqueのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.SET_OPAQUE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • getAcquire

      public final Object getAcquire(Object... args)
      変数の値を返し、このアクセスの前に後続のロードおよびストアの順序が変更されないようにします。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn)Tの形式です。

      getAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドにはmemory_order_acquireの順序付けと互換性のあるメモリー順序付けの効果があります。
      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の値であるシグネチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • setRelease

      public final void setRelease(Object... args)
      変数の値をnewValueに設定し、このアクセス後に以前のロードおよびストアの順序が変更されないようにします。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)voidの形式です。

      setReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.SET_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドにはmemory_order_releaseの順序付けと互換性のあるメモリー順序付けの効果があります。
      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
    • compareAndSet

      public final boolean compareAndSet(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がgetVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、setVolatile(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)booleanの形式です。

      compareAndSetのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.COMPARE_AND_SET)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      成功した場合はtrue、そうでない場合はwitnessの値がexpectedValueと同じでない場合はfalse
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • compareAndExchange

      public final Object compareAndExchange(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がgetVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、setVolatile(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)Tの形式です。

      compareAndExchangeのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合はexpectedValueと同じになり、Objectを使用して静的に表されます。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と互換性がない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子と互換性があり、参照キャストが失敗した場合。
      関連項目:
    • compareAndExchangeAcquire

      public final Object compareAndExchangeAcquire(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がgetAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)Tの形式です。

      compareAndExchangeAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合はexpectedValueと同じになり、Objectを使用して静的に表されます。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • compareAndExchangeRelease

      public final Object compareAndExchangeRelease(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がget(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、setRelease(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)Tの形式です。

      compareAndExchangeReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合はexpectedValueと同じになり、Objectを使用して静的に表されます。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • weakCompareAndSetPlain

      public final boolean weakCompareAndSetPlain(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がget(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)のセマンティクスで変数の値をアトミックにnewValueにアトミックに設定します。

      この操作は、証人の値が期待値と一致していても、誤って失敗(典型的には、メモリー競合)する可能性があります。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)booleanの形式です。

      weakCompareAndSetPlainのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_PLAIN)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      成功した場合はtrue、そうでない場合は証人の値がexpectedValueと同じでない場合、またはこの操作が誤って失敗した場合はfalse
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • weakCompareAndSet

      public final boolean weakCompareAndSet(Object... args)
      「証人の価値」==expectedValueというgetVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数の現在の値がsetVolatile(java.lang.Object...)のメモリー・セマンティクスを持つnewValueに変数の値を原子的に設定する可能性があります。

      この操作は、証人の値が期待値と一致していても、誤って失敗(典型的には、メモリー競合)する可能性があります。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)booleanの形式です。

      weakCompareAndSetのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      成功した場合はtrue、そうでない場合は証人の値がexpectedValueと同じでない場合、またはこの操作が誤って失敗した場合はfalse
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • weakCompareAndSetAcquire

      public final boolean weakCompareAndSetAcquire(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がgetAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)のセマンティクスで変数の値をアトミックにnewValueにアトミックに設定します。

      この操作は、証人の値が期待値と一致していても、誤って失敗(典型的には、メモリー競合)する可能性があります。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)booleanの形式です。

      weakCompareAndSetAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      成功した場合はtrue、そうでない場合は証人の値がexpectedValueと同じでない場合、またはこの操作が誤って失敗した場合はfalse
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • weakCompareAndSetRelease

      public final boolean weakCompareAndSetRelease(Object... args)
      「証人の価値」==expectedValueと呼ばれる変数の現在値がget(java.lang.Object...)のメモリー・セマンティクスでアクセスされる場合、setRelease(java.lang.Object...)のセマンティクスで変数の値をアトミックにnewValueにアトミックに設定します。

      この操作は、証人の値が期待値と一致していても、誤って失敗(典型的には、メモリー競合)する可能性があります。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)booleanの形式です。

      weakCompareAndSetReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      成功した場合はtrue、そうでない場合は証人の値がexpectedValueと同じでない場合、またはこの操作が誤って失敗した場合はfalse
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndSet

      public final Object getAndSet(Object... args)
      setVolatile(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定し、getVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)Tの形式です。

      getAndSetのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_SET)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndSetAcquire

      public final Object getAndSetAcquire(Object... args)
      set(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定し、getAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)Tの形式です。

      getAndSetAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_SET_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndSetRelease

      public final Object getAndSetRelease(Object... args)
      setRelease(java.lang.Object...)のメモリー・セマンティクスを持つ変数の値を原子的にnewValueに設定し、get(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T newValue)Tの形式です。

      getAndSetReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_SET_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T newValue)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndAdd

      public final Object getAndAdd(Object... args)
      valuesetVolatile(java.lang.Object...)のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、getVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T value)Tの形式です。

      getAndAddのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_ADD)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T value)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndAddAcquire

      public final Object getAndAddAcquire(Object... args)
      valueset(java.lang.Object...)のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、getAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T value)Tの形式です。

      getAndAddAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T value)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndAddRelease

      public final Object getAndAddRelease(Object... args)
      valuesetRelease(java.lang.Object...)のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、get(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T value)Tの形式です。

      getAndAddReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_ADD_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T value)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseOr

      public final Object getAndBitwiseOr(Object... args)
      setVolatile(java.lang.Object...)のメモリー・セマンティクスを使用して変数の値を可変電流値とmaskとの間のビットORの結果に原子的に設定し、getVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合は、ビット単位のORの代わりに論理和が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseOrのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseOrAcquire

      public final Object getAndBitwiseOrAcquire(Object... args)
      set(java.lang.Object...)のメモリー・セマンティクスを使用して変数の値を可変電流値とmaskとの間のビットORの結果に原子的に設定し、getAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合は、ビット単位のORの代わりに論理和が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseOrAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseOrRelease

      public final Object getAndBitwiseOrRelease(Object... args)
      setRelease(java.lang.Object...)のメモリー・セマンティクスを使用して変数の値を可変電流値とmaskとの間のビットORの結果に原子的に設定し、get(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合は、ビット単位のORの代わりに論理和が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseOrReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseAnd

      public final Object getAndBitwiseAnd(Object... args)
      setVolatile(java.lang.Object...)のメモリー・セマンティクスを持つ変数current値とmaskとのビット単位のANDの結果に変数の値を原子的に設定し、getVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のANDの代わりに論理積が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseAndのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseAndAcquire

      public final Object getAndBitwiseAndAcquire(Object... args)
      set(java.lang.Object...)のメモリー・セマンティクスを持つ変数current値とmaskとのビット単位のANDの結果に変数の値を原子的に設定し、getAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のANDの代わりに論理積が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseAndAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseAndRelease

      public final Object getAndBitwiseAndRelease(Object... args)
      setRelease(java.lang.Object...)のメモリー・セマンティクスを持つ変数current値とmaskとのビット単位のANDの結果に変数の値を原子的に設定し、get(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のANDの代わりに論理積が実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseAndReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseXor

      public final Object getAndBitwiseXor(Object... args)
      変数の値を変数current値とmaskのビット単位のXORの結果にsetVolatile(java.lang.Object...)のメモリー・セマンティクスで原子的に設定し、getVolatile(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のXORではなく論理XORが実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseXorのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseXorAcquire

      public final Object getAndBitwiseXorAcquire(Object... args)
      変数の値を変数current値とmaskのビット単位のXORの結果にset(java.lang.Object...)のメモリー・セマンティクスで原子的に設定し、getAcquire(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のXORではなく論理XORが実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseXorAcquireのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_ACQUIRE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • getAndBitwiseXorRelease

      public final Object getAndBitwiseXorRelease(Object... args)
      変数の値を変数current値とmaskのビット単位のXORの結果にsetRelease(java.lang.Object...)のメモリー・セマンティクスで原子的に設定し、get(java.lang.Object...)のメモリー・セマンティクスでアクセスされる変数previousの値を返します。

      変数型が非整数boolean型の場合、ビット単位のXORではなく論理XORが実行されます。

      メソッドのシグネチャは、(CT1 ct1, ..., CTn ctn, T mask)Tの形式です。

      getAndBitwiseXorReleaseのコール・サイトのシンボリック型記述子は、このVarHandle上のaccessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_RELEASE)を呼び出した結果のアクセス・モード型と一致していなければなりません。

      パラメータ:
      args - varargsを使用して静的に表現された形式(CT1 ct1, ..., CTn ctn, T mask)のシグネチャ・ポリモーフィック・パラメータ・リスト。
      戻り値:
      Objectを使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。
      例外:
      UnsupportedOperationException - このVarHandleに対してアクセス・モードがサポートされていない場合。
      WrongMethodTypeException - アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。
      ClassCastException - アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。
      関連項目:
    • withInvokeExactBehavior

      public abstract VarHandle withInvokeExactBehavior()
      このVarHandleと同じ変数にアクセスできるが、アクセス・モード・メソッドの呼出し動作がinvoke-exactの動作に調整されているVarHandleを返します。

      このVarHandleにすでにinvoke-exact動作がある場合、このVarHandleが返されます。

      戻されたvarハンドルでhasInvokeExactBehavior()を起動すると、trueが戻されることが保証されます。

      APIのノート:
      invoke-exact動作は、アクセス・モード・メソッドの呼出し時に、引数の型と引数の引数がaccess mode typeと一致する必要があることを保証します。一致しない場合は、WrongMethodTypeExceptionがスローされます。
      戻り値:
      実行時の動作を持つVarHandle
      導入されたバージョン:
      16
      関連項目:
    • withInvokeBehavior

      public abstract VarHandle withInvokeBehavior()
      このVarHandleと同じ変数にアクセスできるが、アクセス・モード・メソッドの呼出し動作が起動動作に調整されているVarHandleを返します。

      このVarHandleに呼出し動作がすでにある場合、このVarHandleが返されます。

      戻されたvarハンドルでhasInvokeExactBehavior()を起動すると、falseが戻されることが保証されます。

      戻り値:
      呼出し動作を持つVarHandle
      導入されたバージョン:
      16
      関連項目:
    • toString

      public final String toString()
      説明されている変数のタイプや座標の説明など、VarHandleのコンパクトなテキスト形式の説明を返します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      このVarHandleのコンパクトなテキスト形式の説明
    • varType

      public Class<?> varType()
      このVarHandleによって参照される変数の可変型を返します。
      戻り値:
      このVarHandleによって参照される変数の可変型
    • coordinateTypes

      public List<Class<?>> coordinateTypes()
      このVarHandleの座標型を返します。
      戻り値:
      このVarHandleの座標型。 返されるリストは変更不可能です
    • accessModeType

      public final MethodType accessModeType(VarHandle.AccessMode accessMode)
      このVarHandleのアクセス・モードの型とアクセス・モードを取得します。

      アクセス・モード型のパラメータ型は、このVarHandleの座標型であるプレフィクスと、それに続くアクセス・モード・メソッドで定義された型で構成されます。 アクセス・モード型の戻り値の型は、アクセス・モード・メソッドの戻り値の型によって定義されます。

      パラメータ:
      accessMode - 同じ名前のシグネチャ・ポリモーフィック・メソッドに対応するアクセス・モード
      戻り値:
      指定されたアクセス・モードのアクセス・モード型
    • isAccessModeSupported

      public final boolean isAccessModeSupported(VarHandle.AccessMode accessMode)
      指定されたアクセス・モードがサポートされている場合はtrueを返し、そうでない場合はfalseを返します。

      与えられたアクセス・モードのfalse値の復帰は、対応するアクセス・モード・メソッドの呼び出し時にUnsupportedOperationExceptionがスローされることを示します。

      パラメータ:
      accessMode - 同じ名前のシグネチャ・ポリモーフィック・メソッドに対応するアクセス・モード
      戻り値:
      指定されたアクセス・モードがサポートされている場合はtrue、それ以外の場合はfalse
    • toMethodHandle

      public MethodHandle toMethodHandle(VarHandle.AccessMode accessMode)
      このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。
      APIのノート:
      VarHandle vhとアクセス・モード{access-mode}のこのメソッドは、次のコード(より効率的かもしれませんが)のhandle handle bmhに相当するメソッド・ハンドルを返します:
      
       MethodHandle mh = MethodHandles.varHandleExactInvoker(
                             vh.accessModeType(VarHandle.AccessMode.{access-mode}));
      
       MethodHandle bmh = mh.bindTo(vh);
       
      パラメータ:
      accessMode - 同じ名前のシグネチャ・ポリモーフィック・メソッドに対応するアクセス・モード
      戻り値:
      このVarHandleと指定されたアクセス・モードにバインドされたメソッド・ハンドル
    • describeConstable

      public Optional<VarHandle.VarHandleDesc> describeConstable()
      このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptionalを返します。
      定義:
      インタフェースConstable内のdescribeConstable
      戻り値:
      最終的な名目記述子を含むOptional、または作成できない場合は空のOptional
      導入されたバージョン:
      12
    • fullFence

      public static void fullFence()
      フェンスの前のロードとストアが、フェンス後にロードとストアで並べ替えられないようにします。
      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドはatomic_thread_fence(memory_order_seq_cst)と互換性のあるメモリー順序付けエフェクトを持っています
    • acquireFence

      public static void acquireFence()
      フェンスの前の負荷がフェンスの後にロードおよびストアと並べ替えられないようにします。
      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドはatomic_thread_fence(memory_order_acquire)と互換性のあるメモリー順序付けエフェクトを持っています
    • releaseFence

      public static void releaseFence()
      フェンスの前の荷物とストアがフェンス後にストアと並び替えられないようにします。
      APIのノート:
      CおよびC++からの多くの意味の違いを無視して、このメソッドはatomic_thread_fence(memory_order_release)と互換性のあるメモリー順序付けエフェクトを持っています
    • loadLoadFence

      public static void loadLoadFence()
      フェンスの前の負荷がフェンス後の負荷と並び替えられないようにします。
    • storeStoreFence

      public static void storeStoreFence()
      フェンスの前にストアがフェンス後にストアと並べ替えられないようにします。