이 멀티스레딩 시리즈에서는 기본 메모리 모델을 자세히 다루지 않습니다
최신 멀티 코어 프로세서에서 각 프로세서는 고유한 특성을 갖습니다.
각 프로세서가 언제든지 다른 프로세서가 무엇을 하는지 알 수 있도록 하려면 많은 오버헤드가 필요하며 일반적으로 불필요합니다.
스레드 간에 데이터를 공유할 때만 필요합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!