事前発生JMMの原則

  Javaのメモリモデルでは、たまたま、前に理解すべきである:前の操作からの結果は、それが次の動作、すなわちメモリの可視性を取得してもよいです。
  メモリ・マルチスレッドの視認性の問題を解決するために、事前発生原理、スレッド間でこれらの原則を遵守するように、最適化コンパイラはまた、特定の制約されてきた提案しました。
  以下の原理要素は次のとおりです。

1、プログラムシーケンスのルール

  スレッド内で、コード実行の一部の結果が順序付けられます。命令は、まだ再配置されますが、どんなに並べ替え、結果は変わりませんコードの順に従って生成されません。

図2に示すように、チューブロックルール

  マルチスレッド環境で、シングルスレッド環境や、同じロックのために、一つのスレッドのロックのロックを解除した後、別のスレッドがロックを取得し、あなたが前にスレッドの操作の結果を見ることができます両方。

3、揮発性変数のルール

  スレッドがvolatile変数を書く行き場合、スレッドはこの変数を読み取るために、その後、書き込み操作の結果は、このスレッドを読むことが見えなければなりません。

4、スレッド開始ルール

  メインスレッドで実行される処理は、プロモータースレッドBは、次いで、プロモーターが修飾Bのスレッドで共有変数をスレッドBの前に表示されているスレッド。

5、スレッドは、ルールを終了します

  メインスレッドで実行される処理は、サブ終了スレッドBが、スレッドBへの変更は、スレッドAを終了する前に、共有変数に表示され

6、糸切れルール

  割り込みスレッド()メソッドの呼び出しは、最初にあなたが(は)割り込みがThread.interruptedを介して行われたか否かを検出することができ、イベントが発生し中断し、中断スレッドコード検出で発生しました。

図7に示すように、転送ルール

  前起こる原理、すなわち、Aが発生し、前にBを、Bが発生する前に-C、次いでAが発生し、前にC、推移的です

図8に示すように、物体側のルール

  初期化完了がオブジェクトである、すなわち、エンドが発生し、前に行わコンストラクタ()メソッドを終了しなければなりません

おすすめ

転載: www.cnblogs.com/ssl-bl/p/11076232.html