- すべての実装されたインタフェース:
Constable
VarHandlesは不変であり、可視状態はありません。 VarHandlesは、ユーザーがサブクラス化できません。
VarHandleには次のものがあります:
variable type
T、このVarHandleによって参照されるすべての変数の型coordinate types
CT1, CT2, ..., CTn
のリスト。このVarHandleによって参照される変数を共同で検索する「座標式」のタイプ。
Class
オブジェクトで表されます。 座標タイプのリストは空である可能性があります。
lookup
VarHandleインスタンスを生成するファクトリ・メソッドは、サポートされている変数型と座標型のリストを文書化します。
各アクセス・モードは、アクセス・モード用に指定された「シグネチャ・ポリモーフィック」メソッドである1つの「アクセス・モード方式」に関連付けられます。 VarHandleインスタンスでアクセス・モード・メソッドが呼び出されると、呼出しの最初の引数は、変数が正確にアクセスされるオブジェクトを示す座標式になります。 呼出しの末尾の引数は、アクセス・モードにとって重要な値を表します。 たとえば、様々な比較/設定または比較/交換アクセス・モードでは、変数の予期される値と新しい値に2つの末尾の引数が必要です。
アクセス・モード・メソッドの呼出しの引数および引数の型は、静的にチェックされません。 かわりに、各アクセス・モード・メソッドは、MethodType
のインスタンスとして表されるaccess mode type
を指定します。このメソッドは、引数を動的にチェックするメソッド・シグネチャの一種として機能します。 アクセス・モード・タイプは、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プロパティに従うことに加えて、すべての「揮発性」操作は、互いに完全に順序付けられています。
アクセス・モードは、次のカテゴリに分類されます:
- 指定されたメモリー順序付け効果で変数の値を取得する読み取りアクセス・モード。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
get
、getVolatile
、getAcquire
、getOpaque
から構成されます。 - 指定されたメモリー順序付け効果で変数の値を設定する書き込みアクセス・モード。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
set
、setVolatile
、setRelease
、setOpaque
から構成されます。 - 不可分更新アクセス・モード。たとえば、指定されたメモリー順序付け効果の下で変数の値を原子的に比較および設定します。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
compareAndSet
、weakCompareAndSetPlain
、weakCompareAndSet
、weakCompareAndSetAcquire
、weakCompareAndSetRelease
、compareAndExchangeAcquire
、compareAndExchange
、compareAndExchangeRelease
、getAndSet
、getAndSetAcquire
、getAndSetRelease
から構成されています。 - 数値アトミック更新アクセス・モード。たとえば、指定されたメモリー順序付け効果で変数の値を追加することで、アトミックに取得および設定します。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
getAndAdd
、getAndAddAcquire
、getAndAddRelease
、 - ビット単位のアトミック・アップデート・アクセス・モード。たとえば、指定されたメモリー・オーダリング効果で変数の値をアトミックに取得してビット単位でOR化します。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
getAndBitwiseOr
、getAndBitwiseOrAcquire
、getAndBitwiseOrRelease
、getAndBitwiseAnd
、getAndBitwiseAndAcquire
、getAndBitwiseAndRelease
、getAndBitwiseXor
、getAndBitwiseXorAcquire
、getAndBitwiseXorRelease
から成ります。
lookup
VarHandleインスタンスを生成またはlookup
するファクトリ・メソッドでは、サポートされるアクセス・モードのセットが文書化されます。これには、変数型および変数が読取り専用かどうかに基づく文書化の制限も含まれる場合があります。 アクセス・モードがサポートされていない場合、対応するアクセス・モード・メソッドは呼び出し時にUnsupportedOperationException
をスローします。 ファクトリ・メソッドは、アクセス・モード・メソッドによってスローされる可能性がある、宣言されていないその他の例外を文書化する必要があります。 get
アクセス・モードはすべてのVarHandleインスタンスでサポートされており、対応するメソッドは決してUnsupportedOperationException
をスローしません。 VarHandleが読取り専用変数(たとえば、final
フィールド)を参照する場合、書込み、アトミック更新、数値アトミック更新およびビット単位アトミック更新アクセス・モードがサポートされず、対応するメソッドがUnsupportedOperationException
をスローします。 読取り/書込みアクセス・モード(サポートされている場合) (get
およびset
を除く)は、参照型およびすべてのプリミティブ型に対するアトミック・アクセスを提供します。 ファクトリ・メソッドのドキュメントで特に明記されていないかぎり、アクセス・モードget
およびset
(サポートされている場合)は、32ビット・プラットフォームではlong
およびdouble
を除き、参照型およびすべてのプリミティブ型にアトミック・アクセスを提供します。
アクセス・モードは、変数の宣言サイトで指定したメモリー順序付け効果をオーバーライドします。 たとえば、get
アクセス・モードを使用してフィールドにアクセスするVarHandleは、そのフィールドがvolatile
と宣言されていても、指定された「アクセス・モード」としてフィールドにアクセスします。 Javaメモリー・モデルでは驚くべき結果が得られる可能性があるため、混合アクセスを実行する場合は細心の注意を払う必要があります。
様々なアクセス・モードでの変数へのアクセスのサポートに加えて、メモリー・フェンス・メソッドと呼ばれる一連の静的メソッドも、メモリー順序付けをきめ細かく制御するために提供されます。 Java言語仕様では、他のスレッドが、ロックの使用、volatile
フィールドまたはVarHandlesなどから生じる制約に従って、プログラム・ソース・コードとは異なる順序で実行されたかのように操作を監視できます。 fullFence
、acquireFence
、releaseFence
、loadLoadFence
および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
オブジェクトが含まれているため、メソッド・タイプ一致では型名とクラス・ローダーの両方が考慮されます。 したがって、あるクラス・ローダーL1
でVarHandle VH
が作成され、別のL2
で使用されている場合でも、L2
で解決されるコール元のシンボリック・タイプ記述子は、L1
で解決される元のコール先メソッドのシンボリック・タイプ記述子と照合されるため、VarHandleアクセス・モード・メソッドの呼出しは型安全です。 L1
の解決は、VH
が作成され、そのアクセス・モード・タイプが割り当てられるときに行われますが、L2
の解決は、invokevirtual
命令がリンクされると行われます。
タイプ記述子チェックとは別に、変数にアクセスするためのVarHandles機能は制限されません。 VarHandleが非public変数に対して、その変数にアクセスできるクラスによって形成される場合、結果のVarHandleは、その変数への参照を受け取る呼出し側がどこからでも使用できます。
リフレクション・メソッドが呼び出されるたびにアクセスがチェックされるコア・リフレクションAPIとは異なり、VarHandleアクセス・チェックは「VarHandleが作成されたとき」で実行されます。 したがって、非public変数へのVarHandles、または非publicクラスの変数へのVarHandlesは、通常、秘密にしておく必要があります。 信頼できないコードがそれらを使用しても問題が発生しない場合を除き、それらを信頼できないコードに渡さないようにしてください。
VarHandleの作成
Javaコードでは、そのコードにアクセスできるすべてのフィールドに直接アクセスするVarHandleを作成できます。 これは、MethodHandles.Lookup
というリフレクティブな機能ベースのAPIを介して行われます。 たとえば、非静的フィールドのVarHandleは、Lookup.findVarHandle
から取得できます。 また、コア・リフレクションAPIオブジェクトLookup.unreflectVarHandle
からの変換メソッドもあります。
保護されたフィールド・メンバーへのアクセスは、アクセス・クラスまたはそのサブクラスの1つだけのレシーバに制限され、アクセス・クラスは、保護されているメンバーの定義クラスのサブクラス(パッケージ兄弟)である必要があります。 VarHandleが現在のパッケージ外の宣言クラスの保護された非静的フィールドを参照する場合、receiver引数はアクセス・クラスのタイプに絞り込まれます。
VarHandlesとCore Reflection APIの相互運用
Lookup
APIでファクトリ・メソッドを使用すると、コア・リフレクションAPIオブジェクトで表されるすべてのフィールドを、動作的に同等のVarHandleに変換できます。 たとえば、リフレクティブField
は、Lookup.unreflectVarHandle
を使用してVarHandleに変換できます。 結果のVarHandlesは、通常、基礎となるフィールドへのより直接的で効率的なアクセスを提供します。
特殊なケースとして、Core Reflection APIを使用して、このクラスのシグネチャ多相アクセス・モード・メソッドを表示すると、それらは通常の非多相メソッドとして表示されます。 Class.getDeclaredMethod
で示されるそれらのリフレクション表現は、このAPIでの特殊なステータスの影響を受けません。 たとえば、Method.getModifiers
では、同様に宣言されたすべてのメソッドで必要になる修飾子ビット(この場合はnative
ビットやvarargs
ビットなど)が厳密に報告されます。
リフレクトされたメソッドと同様に、これらのメソッド(反射したとき)は、JNIを介して直接、またはLookup.unreflect
を介して間接的にjava.lang.reflect.Method.invoke
を介して呼び出すことができます。 ただし、このようなリフレクティブ・コールでは、アクセス・モード・メソッドの呼出しは行われません。 そのような呼出しに必要な引数(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汎用型で宣言されたフィールドなどの変数に対して取得できます。 Core Reflection APIと同様に、VarHandleの変数型はソース・レベル型の消去から構築されます。 VarHandleアクセス・モード・メソッドが呼び出されると、その引数の型または戻り値のキャスト型は、汎用型または型インスタンスになります。 これが起こった場合、コンパイラは、invokevirtual
命令のシンボリック型記述子を構築する際に、それらの型を対応するイレイジャで置き換えます。 - 導入されたバージョン:
- 9
- 関連項目:
-
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明static enum
VarHandleによって参照される変数へのアクセス方法を指定するアクセス・モードのセット。static final class
-
メソッドのサマリー
修飾子と型メソッド説明final MethodType
accessModeType
(VarHandle.AccessMode accessMode) このVarHandleのアクセス・モード・タイプおよび特定のアクセス・モードを取得します。static void
フェンスの前の荷重が、フェンスの後の荷重と荷重で並べ替えられないようにします。final Object
compareAndExchange
(Object... args) 変数の現行値(「証人の価値」、==
、expectedValue
)がgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をsetVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してnewValue
に原子的に設定します。final Object
compareAndExchangeAcquire
(Object... args) 変数の現行値(「証人の価値」、==
、expectedValue
)がgetAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をset(java.lang.Object...)
のメモリー・セマンティクスを使用してnewValue
に原子的に設定します。final Object
compareAndExchangeRelease
(Object... args) 変数の現行値(「証人の価値」、==
、expectedValue
)がget(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をsetRelease(java.lang.Object...)
のメモリー・セマンティクスを使用してnewValue
に原子的に設定します。final boolean
compareAndSet
(Object... args) 変数の現行値(「証人の価値」、==
、expectedValue
)がgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をsetVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してnewValue
に原子的に設定します。このVarHandleの座標型を返します。このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptional
を返します。static void
フェンスの前の荷重および保管が、フェンスの後の荷重および保管で再オーダーされないようにします。final Object
変数がvolatile
以外で宣言されたかのように、読取りのメモリー・セマンティクスを使用して変数の値を返します。final Object
getAcquire
(Object... args) 変数の値を返し、このアクセスの前に後続のロードおよびストアの順序が変更されないようにします。final Object
value
は、メモリー・セマンティクスがsetVolatile(java.lang.Object...)
の変数の現在の値に原子的に追加され、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。final Object
getAndAddAcquire
(Object... args) value
は、メモリー・セマンティクスがset(java.lang.Object...)
の変数の現在の値に原子的に追加され、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。final Object
getAndAddRelease
(Object... args) value
は、メモリー・セマンティクスがsetRelease(java.lang.Object...)
の変数の現在の値に原子的に追加され、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。final Object
getAndBitwiseAnd
(Object... args) 変数の値をビット単位ANDの結果に原子的に設定し、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndBitwiseAndAcquire
(Object... args) 変数の値をビット単位ANDの結果に原子的に設定し、set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndBitwiseAndRelease
(Object... args) 変数の値をビット単位ANDの結果に原子的に設定し、setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndBitwiseOr
(Object... args) setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。final Object
getAndBitwiseOrAcquire
(Object... args) set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。final Object
getAndBitwiseOrRelease
(Object... args) setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。final Object
getAndBitwiseXor
(Object... args) 変数の値を、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndBitwiseXorAcquire
(Object... args) 変数の値を、set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndBitwiseXorRelease
(Object... args) 変数の値を、setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndSetAcquire
(Object... args) set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
getAndSetRelease
(Object... args) setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。final Object
プログラムの順序でアクセスされる変数の値を返します。ただし、他のスレッドに対するメモリーの順序付け効果は保証されません。final Object
getVolatile
(Object... args) 変数がvolatile
と宣言されているかのように、読取りのメモリー・セマンティクスを使用して変数の値を返します。boolean
このVarHandleに「invoke-exactの動作」がある場合、true
を返します。boolean
isAccessModeSupported
(VarHandle.AccessMode accessMode) 指定されたアクセス・モードがサポートされている場合はtrue
を返し、それ以外の場合はfalse
を返します。static void
フェンスの前の荷重が、フェンスの後の荷重で並べ替えられないようにします。static void
フェンスの前の荷重および保管が、フェンスの後のストアで再オーダーされないようにします。final void
変数の値をnewValue
に設定し、変数が非volatile
および非final
として宣言されているかのように設定されたメモリー・セマンティクスを持つ。final void
変数の値をプログラム順序でnewValue
に設定しますが、他のスレッドに対するメモリー順序付け効果は保証されません。final void
setRelease
(Object... args) 変数の値をnewValue
に設定し、このアクセス後に以前のロードおよびストアの順序が変更されないようにします。final void
setVolatile
(Object... args) 変数の値をnewValue
に設定し、変数がvolatile
として宣言されているかのように設定されたメモリー・セマンティクスを持つ。static void
フェンスの前のストアがフェンス後のストアで再オーダーされないようにします。toMethodHandle
(VarHandle.AccessMode accessMode) このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。final String
toString()
説明されている変数のタイプや座標の説明など、VarHandleのコンパクトなテキスト形式の説明を返します。Class
<?> varType()
このVarHandleによって参照される変数の変数型を返します。final boolean
weakCompareAndSet
(Object... args) 変数の現在の値(「証人の価値」、==
、expectedValue
)がgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をsetVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してnewValue
に原子的に設定できます。final boolean
weakCompareAndSetAcquire
(Object... args) 変数の現在の値(「証人の価値」、==
、expectedValue
)がgetAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をset(java.lang.Object...)
のセマンティクスを使用してnewValue
に原子的に設定できます。final boolean
weakCompareAndSetPlain
(Object... args) 変数の現在の値(「証人の価値」、==
、expectedValue
)がget(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をset(java.lang.Object...)
のセマンティクスを使用してnewValue
に原子的に設定できます。final boolean
weakCompareAndSetRelease
(Object... args) 変数の現在の値(「証人の価値」、==
、expectedValue
)がget(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、変数の値をsetRelease(java.lang.Object...)
のセマンティクスを使用してnewValue
に原子的に設定できます。abstract VarHandle
このVarHandleと同じ変数にアクセスできるが、アクセス・モード・メソッドの呼出し動作が「起動動作」に調整されているVarHandleを返します。abstract VarHandle
このVarHandleと同じ変数にアクセスできるが、アクセス・モード・メソッドの呼出し動作が「invoke-exactの動作」に調整されているVarHandleを返します。
-
メソッドの詳細
-
hasInvokeExactBehavior
public boolean hasInvokeExactBehavior()このVarHandleに「invoke-exactの動作」がある場合、true
を返します。- 戻り値:
- このVarHandleに「invoke-exactの動作」がある場合は
true
。 - 導入されたバージョン:
- 16
- 関連項目:
-
get
変数がvolatile
以外で宣言されたかのように、読取りのメモリー・セマンティクスを使用して変数の値を返します。 一般的に、プレーン読取りアクセスと呼ばれます。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn)T
の形式です。get
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。このアクセス・モードは、すべてのVarHandleインスタンスでサポートされており、
UnsupportedOperationException
をスローしません。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
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)
形式のsignature-polymorphicパラメータ・リスト。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。
-
getVolatile
変数がvolatile
と宣言されているかのように、読取りのメモリー・セマンティクスを使用して変数の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn)T
の形式です。getVolatile
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_VOLATILE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
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)
形式のsignature-polymorphicパラメータ・リスト。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。
-
getOpaque
プログラムの順序でアクセスされる変数の値を返します。ただし、他のスレッドに対するメモリーの順序付け効果は保証されません。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn)T
の形式です。getOpaque
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_OPAQUE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
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)
形式のsignature-polymorphicパラメータ・リスト。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。
-
getAcquire
変数の値を返し、このアクセスの前に後続のロードおよびストアの順序が変更されないようにします。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn)T
の形式です。getAcquire
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_ACQUIRE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- APIのノート:
- CおよびC++とのセマンティクスの多くの違いを無視して、このメソッドには、
memory_order_acquire
順序付けと互換性のあるメモリー順序付け効果があります。 - パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
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)
形式のsignature-polymorphicパラメータ・リスト。- 例外:
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 成功した場合は
true
、「証人の価値」がexpectedValue
と異なる場合はfalse
。 - 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
compareAndExchange
変数の現行値(「証人の価値」、==
、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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 「証人の価値」のシグネチャ多相結果。成功した場合、
Object
を使用して静的に表されるexpectedValue
と同じになります。 - 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と互換性がない場合。ClassCastException
- アクセス・モード型が呼び出し元のシンボリック型記述子と互換性があるが、参照キャストが失敗した場合。- 関連項目:
-
compareAndExchangeAcquire
変数の現行値(「証人の価値」、==
、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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 「証人の価値」のシグネチャ多相結果。成功した場合、
Object
を使用して静的に表されるexpectedValue
と同じになります。 - 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
compareAndExchangeRelease
変数の現行値(「証人の価値」、==
、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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 「証人の価値」のシグネチャ多相結果。成功した場合、
Object
を使用して静的に表されるexpectedValue
と同じになります。 - 例外:
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 成功した場合は
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 成功した場合は
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 成功した場合は
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
- 成功した場合は
true
、失敗した場合は「証人の価値」がexpectedValue
と同じでなかった場合、またはこの操作が誤って失敗した場合にはfalse
。 - 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndSet
setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T newValue)T
の形式です。getAndSet
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_SET)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T newValue)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndSetAcquire
set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T newValue)T
の形式です。getAndSetAcquire
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_SET_ACQUIRE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T newValue)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndSetRelease
setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をnewValue
に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T newValue)T
の形式です。getAndSetRelease
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_SET_RELEASE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T newValue)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndAdd
value
は、メモリー・セマンティクスがsetVolatile(java.lang.Object...)
の変数の現在の値に原子的に追加され、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T value)T
の形式です。getAndAdd
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_ADD)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T value)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndAddAcquire
value
は、メモリー・セマンティクスがset(java.lang.Object...)
の変数の現在の値に原子的に追加され、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T value)T
の形式です。getAndAddAcquire
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T value)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndAddRelease
value
は、メモリー・セマンティクスがsetRelease(java.lang.Object...)
の変数の現在の値に原子的に追加され、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の前の値を返します。メソッドのシグネチャは、
(CT1 ct1, ..., CTn ctn, T value)T
の形式です。getAndAddRelease
のコール・サイトのシンボリック・タイプ記述子は、このVarHandleでaccessModeType(VarHandle.AccessMode.GET_AND_ADD_RELEASE)
をコールした結果であるアクセス・モード・タイプと一致する必要があります。- パラメータ:
args
- varargsを使用して静的に表される、(CT1 ct1, ..., CTn ctn, T value)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseOr
setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。変数型が非整数
boolean
型の場合、論理ORはビット単位の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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseOrAcquire
set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。変数型が非整数
boolean
型の場合、論理ORはビット単位の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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseOrRelease
setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の値をビット単位のORとmask
の間の結果に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスした変数の前の値を返します。変数型が非整数
boolean
型の場合、論理ORはビット単位の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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseAnd
変数の値をビット単位ANDの結果に原子的に設定し、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
boolean
型の場合、ビット単位のANDのかわりに論理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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseAndAcquire
変数の値をビット単位ANDの結果に原子的に設定し、set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
boolean
型の場合、ビット単位のANDのかわりに論理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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseAndRelease
変数の値をビット単位ANDの結果に原子的に設定し、setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間の値を設定します。また、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
boolean
型の場合、ビット単位のANDのかわりに論理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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseXor
変数の値を、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseXorAcquire
変数の値を、set(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
Object
を使用して静的に表される、変数の前の値であるシグナチャ・ポリモーフィックの結果。- 例外:
UnsupportedOperationException
- アクセス・モードがこのVarHandleでサポートされていない場合。WrongMethodTypeException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致しない場合。ClassCastException
- アクセス・モード・タイプがコール元のシンボリック・タイプ記述子と一致するが、参照キャストが失敗した場合。- 関連項目:
-
getAndBitwiseXorRelease
変数の値を、setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して、変数の現在の値とmask
の間のビット単位のXORの結果に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスを使用してアクセスされる変数の前の値を返します。変数型が非整数
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)
形式のsignature-polymorphicパラメータ・リスト。- 戻り値:
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
-
varType
-
coordinateTypes
-
accessModeType
public final MethodType accessModeType(VarHandle.AccessMode accessMode) このVarHandleのアクセス・モード・タイプおよび特定のアクセス・モードを取得します。アクセス・モード・タイプのパラメータ・タイプは、このVarHandleの座標型であるプレフィクスと、アクセス・モード・メソッドで定義されるその他の型で構成されます。 アクセス・モード・タイプの戻り型は、アクセス・モード・メソッドの戻り型で定義されます。
- パラメータ:
accessMode
- 同じ名前のsignature-polymorphicメソッドに対応するアクセス・モード- 戻り値:
- 指定されたアクセス・モードのアクセス・モード型
-
isAccessModeSupported
public boolean isAccessModeSupported(VarHandle.AccessMode accessMode) 指定されたアクセス・モードがサポートされている場合はtrue
を返し、それ以外の場合はfalse
を返します。特定のアクセス・モードに対する
false
値の戻り値は、対応するアクセス・モード・メソッドの起動時にUnsupportedOperationException
がスローされることを示します。- パラメータ:
accessMode
- 同じ名前のsignature-polymorphicメソッドに対応するアクセス・モード- 戻り値:
- 指定されたアクセス・モードがサポートされている場合は
true
、それ以外の場合はfalse
。
-
toMethodHandle
public MethodHandle toMethodHandle(VarHandle.AccessMode accessMode) このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。- APIのノート:
- このメソッドは、VarHandle
vh
およびアクセス・モード{access-mode}
に対して、次のコード(より効率的かもしれませんが)のメソッド・ハンドルbmh
に相当するメソッド・ハンドルを返します:MethodHandle mh = MethodHandles.varHandleExactInvoker( vh.accessModeType(VarHandle.AccessMode.{access-mode})); MethodHandle bmh = mh.bindTo(vh);
- パラメータ:
accessMode
- 同じ名前のsignature-polymorphicメソッドに対応するアクセス・モード- 戻り値:
- この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()フェンスの前のストアがフェンス後のストアで再オーダーされないようにします。
-