- すべての実装されたインタフェース:
Constable
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プロパティに従うことに加えて、すべての「揮発性」操作は、互いに完全に順序付けられています。
アクセス・モードは、次のカテゴリに分類されます:
- 指定されたメモリー順序付け効果の下で変数の値を取得する読み取りアクセス・モード。 このグループに属する対応するアクセス・モード・メソッドのセットは、メソッド
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
から成ります。
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
オブジェクトが含まれているため、メソッド型のマッチングには型名とクラス・ローダーの両方が考慮されます。 したがって、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
- 関連項目:
MethodHandle
,MethodHandles
,MethodType
-
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明static class
VarHandleによって参照される変数へのアクセス方法を指定するアクセス・モードのセット。static class
-
メソッドのサマリー
修飾子と型メソッド説明accessModeType(VarHandle.AccessMode accessMode)
このVarHandleのアクセス・モードの型とアクセス・モードを取得します。static void
フェンスの前の負荷がフェンスの後にロードおよびストアと並べ替えられないようにします。compareAndExchange(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定します。compareAndExchangeAcquire(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がgetAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定します。compareAndExchangeRelease(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がget(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、setRelease(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定します。boolean
compareAndSet(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、setVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定します。このVarHandleの座標型を返します。このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptional
を返します。static void
フェンスの前のロードとストアが、フェンス後にロードとストアで並べ替えられないようにします。変数が非volatile
と宣言されているかのように、読み込みのメモリー・セマンティクスを持つ変数の値を返します。getAcquire(Object... args)
変数の値を返し、このアクセスの前に後続のロードおよびストアの順序が変更されないようにします。value
をsetVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndAddAcquire(Object... args)
value
をset(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndAddRelease(Object... args)
value
をsetRelease(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の現在の値に原子的に追加し、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseAnd(Object... args)
setVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つ変数current値とmask
とのビット単位のANDの結果に変数の値を原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseAndAcquire(Object... args)
set(java.lang.Object...)
のメモリー・セマンティクスを持つ変数current値とmask
とのビット単位のANDの結果に変数の値を原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseAndRelease(Object... args)
setRelease(java.lang.Object...)
のメモリー・セマンティクスを持つ変数current値とmask
とのビット単位のANDの結果に変数の値を原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseOr(Object... args)
setVolatile(java.lang.Object...)
のメモリー・セマンティクスを使用して変数の値を可変電流値とmask
との間のビットORの結果に原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseOrAcquire(Object... args)
set(java.lang.Object...)
のメモリー・セマンティクスを使用して変数の値を可変電流値とmask
との間のビットORの結果に原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseOrRelease(Object... args)
setRelease(java.lang.Object...)
のメモリー・セマンティクスを使用して変数の値を可変電流値とmask
との間のビットORの結果に原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseXor(Object... args)
変数の値を変数current値とmask
のビット単位のXORの結果にsetVolatile(java.lang.Object...)
のメモリー・セマンティクスで原子的に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseXorAcquire(Object... args)
変数の値を変数current値とmask
のビット単位のXORの結果にset(java.lang.Object...)
のメモリー・セマンティクスで原子的に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndBitwiseXorRelease(Object... args)
変数の値を変数current値とmask
のビット単位のXORの結果にsetRelease(java.lang.Object...)
のメモリー・セマンティクスで原子的に設定し、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。setVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定し、getVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndSetAcquire(Object... args)
set(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定し、getAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。getAndSetRelease(Object... args)
setRelease(java.lang.Object...)
のメモリー・セマンティクスを持つ変数の値を原子的にnewValue
に設定し、get(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数previousの値を返します。プログラム順序でアクセスされるが、他のスレッドに関してメモリー順序付けの効果が保証されていない変数の値を返します。getVolatile(Object... args)
変数がvolatile
として宣言されているかのように、読み込みのメモリー・セマンティクスを持つ変数の値を返します。boolean
このVarHandleに「invoke-exactの動作」がある場合、true
を返します。boolean
isAccessModeSupported(VarHandle.AccessMode accessMode)
指定されたアクセス・モードがサポートされている場合はtrue
を返し、そうでない場合はfalse
を返します。static void
フェンスの前の負荷がフェンス後の負荷と並び替えられないようにします。static void
フェンスの前の荷物とストアがフェンス後にストアと並び替えられないようにします。void
変数の値をnewValue
に設定し、変数が非volatile
および非final
として宣言されているかのように設定されたメモリー・セマンティクスを持つ。void
プログラムの順序で変数の値をnewValue
に設定しますが、他のスレッドに関してメモリーの順序付けの効果は保証されません。void
setRelease(Object... args)
変数の値をnewValue
に設定し、このアクセス後に以前のロードおよびストアの順序が変更されないようにします。void
setVolatile(Object... args)
変数の値をnewValue
に設定し、変数がvolatile
として宣言されているかのように設定されたメモリー・セマンティクスを持つ。static void
フェンスの前にストアがフェンス後にストアと並べ替えられないようにします。toMethodHandle(VarHandle.AccessMode accessMode)
このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。toString()
説明されている変数のタイプや座標の説明など、VarHandleのコンパクトなテキスト形式の説明を返します。Class<?>
varType()
このVarHandleによって参照される変数の可変型を返します。boolean
weakCompareAndSet(Object... args)
「証人の価値」、==
、expectedValue
というgetVolatile(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる変数の現在の値がsetVolatile(java.lang.Object...)
のメモリー・セマンティクスを持つnewValue
に変数の値を原子的に設定する可能性があります。boolean
weakCompareAndSetAcquire(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がgetAcquire(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)
のセマンティクスで変数の値をアトミックにnewValue
にアトミックに設定します。boolean
weakCompareAndSetPlain(Object... args)
「証人の価値」、==
、expectedValue
と呼ばれる変数の現在値がget(java.lang.Object...)
のメモリー・セマンティクスでアクセスされる場合、set(java.lang.Object...)
のセマンティクスで変数の値をアトミックにnewValue
にアトミックに設定します。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
- 関連項目:
withInvokeExactBehavior()
,withInvokeBehavior()
-
get
変数が非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
変数が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
プログラム順序でアクセスされるが、他のスレッドに関してメモリー順序付けの効果が保証されていない変数の値を返します。メソッドのシグネチャは、
(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
変数の値を返し、このアクセスの前に後続のロードおよびストアの順序が変更されないようにします。メソッドのシグネチャは、
(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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
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)
のシグネチャ・ポリモーフィック・パラメータ・リスト。- 戻り値:
- 証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合は
expectedValue
と同じになり、Object
を使用して静的に表されます。 - 例外:
UnsupportedOperationException
- このVarHandleに対してアクセス・モードがサポートされていない場合。WrongMethodTypeException
- アクセス・モードの型が呼び出し元のシンボリック型記述子と互換性がない場合。ClassCastException
- アクセス・モード型が呼び出し側シンボリック型記述子と互換性があり、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
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)
のシグネチャ・ポリモーフィック・パラメータ・リスト。- 戻り値:
- 証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合は
expectedValue
と同じになり、Object
を使用して静的に表されます。 - 例外:
UnsupportedOperationException
- このVarHandleに対してアクセス・モードがサポートされていない場合。WrongMethodTypeException
- アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。ClassCastException
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,getAcquire(Object...)
-
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)
のシグネチャ・ポリモーフィック・パラメータ・リスト。- 戻り値:
- 証人の値であるシグネチャ・ポリモーフィックの結果。成功した場合は
expectedValue
と同じになり、Object
を使用して静的に表されます。 - 例外:
UnsupportedOperationException
- このVarHandleに対してアクセス・モードがサポートされていない場合。WrongMethodTypeException
- アクセス・モードの型が呼び出し元のシンボリック型記述子と一致しない場合。ClassCastException
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setRelease(Object...)
,get(Object...)
-
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,get(Object...)
-
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,getAcquire(Object...)
-
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setRelease(Object...)
,get(Object...)
-
getAndSet
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndSetAcquire
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndSetRelease
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndAdd
value
をsetVolatile(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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndAddAcquire
value
をset(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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndAddRelease
value
をsetRelease(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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndBitwiseOr
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndBitwiseOrAcquire
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,getAcquire(Object...)
-
getAndBitwiseOrRelease
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setRelease(Object...)
,get(Object...)
-
getAndBitwiseAnd
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndBitwiseAndAcquire
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,getAcquire(Object...)
-
getAndBitwiseAndRelease
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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setRelease(Object...)
,get(Object...)
-
getAndBitwiseXor
変数の値を変数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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setVolatile(Object...)
,getVolatile(Object...)
-
getAndBitwiseXorAcquire
変数の値を変数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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
set(Object...)
,getAcquire(Object...)
-
getAndBitwiseXorRelease
変数の値を変数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
- アクセス・モード型が呼び出し側シンボリック型記述子に一致し、参照キャストが失敗した場合。- 関連項目:
setRelease(Object...)
,get(Object...)
-
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()
,hasInvokeExactBehavior()
-
withInvokeBehavior
public abstract VarHandle withInvokeBehavior()このVarHandleと同じ変数にアクセスできるが、アクセス・モード・メソッドの呼出し動作が「起動動作」に調整されているVarHandleを返します。このVarHandleに呼出し動作がすでにある場合、このVarHandleが返されます。
戻されたvarハンドルで
hasInvokeExactBehavior()
を起動すると、false
が戻されることが保証されます。- 戻り値:
- 呼出し動作を持つVarHandle
- 導入されたバージョン:
- 16
- 関連項目:
withInvokeExactBehavior()
,hasInvokeExactBehavior()
-
toString
public final String toString()説明されている変数のタイプや座標の説明など、VarHandleのコンパクトなテキスト形式の説明を返します。 -
varType
public Class<?> varType()このVarHandleによって参照される変数の可変型を返します。- 戻り値:
- このVarHandleによって参照される変数の可変型
-
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 handlebmh
に相当するメソッド・ハンドルを返します: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()フェンスの前にストアがフェンス後にストアと並べ替えられないようにします。
-