Happens-Before Consistency を理解する
Java 言語仕様 (JLS) における Happens-Before 一貫性の概念は、一貫した順序付けを指します。マルチスレッド環境で読み取りと書き込みを行います。
Happens-Before 一貫性の定義
一連のアクション A は、すべての読み取り r に対して、Happens-Before 一貫性がある場合に一致します。 A では、W(r) は r によって見られる書き込みアクションです:
回答された質問
1.あなたの理解は正しいですか?
はい、あなたの理解は正しいです。 「次の単語と等しい: ..., ... も ... でもない場合である」は、論理的に正式な定義と同等です。
2. 「w.v = r.v」とはどういう意味ですか?
w.v と r.v は、それぞれ書き込み w と読み取り r によってアクセスされる変数の値を指します。条件 w.v = r.v は、両方のアクションで読み取られる値が同じであることを意味します。
3.実行順序の左側の数字は何を表しますか?
左側の数字は、元のコードのアクションの順序を表します。
4.揮発性フィールドに関するあなたの理解は正しいですか?
はい、あなたの理解は正しいです。最初の実行順序では、A と B が不揮発性フィールドであるため、r2 と r1 の両方で最初の書き込みが 0 になり、読み取りの遅延または不一致が可能になります。
5。この状況 (後で発生する読み取りと書き込み) は現実世界に存在しますか?
はい、存在する可能性があります。一例として、2 つのスレッドがそれぞれのレジスタを通じて共有データにアクセスし、最適化により読み取りスレッドが書き込みスレッドによる変更を検出できない場合があります。
6.実際の例を挙げていただけますか?
次の例を考えてみましょう:
スレッド 1
<code class="java">volatile boolean running = true;</code>
スレッド 2
<code class="java">while (running) { // Perform task }</code>
この例では、読み取りスレッドの最適化により、running の更新された値をロードできない場合、スレッド 1 がすでに running を設定しているにもかかわらず、古い値が表示され続け、ループが無期限に実行されます。 false。
以上がJava の「前に発生する」一貫性とは何ですか?また、それはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。