131

transient誰かが Java での修飾子とvolatile修飾子の意味を説明できますか?

4

4 に答える 4

163

volatileおよび修飾子は、フィールド タイプに関係なく、クラス1transientのフィールドに適用できます。それを除けば、それらは無関係です。

修飾子は、クラスのtransientインスタンスをシリアライズするときにフィールドを除外するように Java オブジェクトのシリアライゼーション サブシステムに指示します。オブジェクトがデシリアライズされると、フィールドはデフォルト値に初期化されます。つまりnull、参照型の場合、ゼロまたはfalseプリミティブ型の場合です。JLS ( 8.3.1.3transientを参照) は何を意味するかを述べていませんが、 Java オブジェクトのシリアライゼーション仕様に準拠していることに注意してください。他のシリアル化メカニズムは、フィールドの-nessに注意を払うかもしれません。transientまたは、彼らはそれを無視するかもしれません。

(JLS では、staticフィールドを として宣言することが許可されていることに注意してくださいtransient。この組み合わせは Java オブジェクトのシリアライゼーションには意味がありません。静的なものをシリアライズしないためです。全面的に禁止しているわけではありません。)

修飾子は、フィールドへのvolatile書き込みは常にメモリに同期的にフラッシュする必要があり、フィールドの読み取りは常にメモリから読み取る必要があることを JVM に通知します2。これは、揮発性としてマークされたフィールドが、ネイティブまたは標準のライブラリ ベースの同期を使用せずに、マルチスレッド アプリケーションで安全にアクセスおよび更新できることを意味します。同様に、volatile フィールドへの読み取りと書き込みはアトミックです。(これは、一部の JVM で「ワード ティアリング」の対象となる可能性がある >>non-volatile<<longまたはdoubleフィールドには適用されません。) JLS の関連部分は8.3.1.417.4、および17.7です。


1 - ただし、ローカル変数またはパラメーターに対してではありません。
2 - この説明は意図的に非公式で単純化されています。たとえば、揮発性書き込みの前に発生する不揮発性書き込みの可視性には、追加の意味があります。volatileセマンティクスの正確で正式な詳細な仕様については、上記にリンクされている JLS Chapter 17 (Memory Model) のリファレンスを参照してください。JMM 仕様は、モデル化された動作に関するものであり、その動作がプラットフォーム レベルでどのように実装されているかには依存しないことに注意してください。

于 2010-08-23T06:03:39.873 に答える
11

volatiletransientキーワード

1)transientキーワードはインスタンス変数と共に使用され、シリアル化プロセスからそれらを除外します。フィールドが である場合、transientその値は永続化されません。

一方、volatileキーワードは、Java 変数を「メイン メモリに格納されている」ことを示すために使用されます。

変数のすべての読み取りはvolatile、CPU キャッシュからではなく、コンピューターのメイン メモリから読み取られます。volatile変数へのすべての書き込みは、CPU キャッシュだけでなく、メイン メモリにも書き込まれます。

2)キーワードはキーワードtransientとともに使用できませんが、とともに使用できます。staticvolatilestatic

3)transient変数はデシリアライズ中にデフォルト値で初期化され、値の割り当てまたは復元はアプリケーション コードで処理する必要があります。

詳細については、私のブログを参照してください:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html

于 2016-12-24T04:20:35.077 に答える
7

揮発性とは、他のスレッドがその特定の変数を編集できることを意味します。そのため、コンパイラはそれらへのアクセスを許可します。

http://www.javamex.com/tutorials/synchronization_volatile.shtml

一時的とは、オブジェクトをシリアル化すると、逆シリアル化でデフォルト値を返すことを意味します

http://www.geekinterview.com/question_details/2

于 2010-08-23T05:32:33.283 に答える