2016-06-25 5 views

答えて

3

複数のスレッドで何かをしているかどうかに関わらず、変数volatileを宣言できますが、マルチスレッドの外では実際には役に立ちません。その変数の読み込みと書き込みには大きな利得はありません。

0

と指定されたのJava言語仕様(JLM)のvolatileの動作は、Java Memory Model(JMM)にあります。 JMMは、あるスレッドが別のスレッドによって実行されたメモリ操作の結果を見ているかどうかをいつでも知ることができるため、単純な「いいえ」がその質問に対する有効な答えとなります。 (私の意見では)

「使える」と「使うべきである」という言葉は、英語の意味が異なることを除いて。したがって、フィールドの宣言には、を「使用できる」ことを指摘しているかもしれませんが、そこではスレッドを1つしか使用しないことがあります。あなたはそれを行うことができます。それは許されています...しかしそれは無意味です。


注意すべき他の事はvolatileが異なるコード・シーケンスを発するようにネイティブコードコンパイラを引き起こすことがあります。これらのコードシーケンスによって、JLS/JMMが範囲外として扱うコンテキストで、コードが微妙に異なる動作をする可能性があります。例えば、(何らかの形で)オブジェクトフィールドをメモリマップされたハードウェアデバイスレジスタなどにマッピングしている場合は、関連性があります。

ただし、これはJLSで指定されているJava言語の範囲外です。そして、絶対に持ち運びできない。通常のJavaプログラム/プログラマーとは無関係です。

関連する問題