このシリーズのマルチスレッドでは、基礎となるメモリ モデルについては詳しく説明しません
最新のマルチコア プロセッサでは、各プロセッサが独自のメモリ モデルを持っています。メインメモリと定期的に調整される独自のキャッシュ
各プロセッサがいつでも他のプロセッサが何をしているかを確実に把握するには、多くのオーバーヘッドが必要ですが、通常は不要です
スレッド間でデータを共有する場合にのみ必要です。情報を知るため; JAVAでは、それは正しい同期によって達成されます
モデルの紹介
例:AとBの間ではBの方が好きですが、明示的に選択する必要はありません
例: ロック操作、複数のスレッド間で実行順序を予測できます 時間は Happens-Before と一致します ロックがなければ、を判断することは不可能です。スレッド間のスケジューリング 3. 解放 本当の理由: 命令の並べ替えにより、共有オブジェクトの公開と別のスレッドでのオブジェクトへのアクセスの間には発生しません。正しく構築され、リリースされました
public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b = 0;/** * 判断输出值将会非常困难: * 1:多线程之间的切换,导致可能的输出值:(0,1)(1,0)(1,1) * 2.指令重排序:one线程如a=1和x=b之间重排序,x=b(0),然后other线程被调度执行y=a(0),将导致(0,0) */public static void main(String[] args) throws InterruptedException { Thread one = new Thread(new Runnable() {public void run() { a = 1; x = b; } }); Thread other = new Thread(new Runnable() {public void run() { b = 1; y = a; } }); one.start(); other.start(); one.join(); other.join(); System.out.println("( " + x + "," + y + ")"); } }
以上がメモリ モデルとは何ですか?なぜ必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。