Java Memory Model (JMM)은 Java가 메모리를 통해 어떻게 스레드가 어떻게 상호 작용하는지 정의합니다. 한 스레드가 다른 사람에게 볼 때 변경되는지 설명합니다. JMM은 올바른 con Javacurrent 프로그램을 작성하고 데이터 레이스와 가시성 문제와 같은 일반적인 문제를 피하기 위해 필수적입니다.

Java 메모리 모델의 기본

JMM은 스레드가 읽는 방법을 위한 규칙을 지정하고 공유한 변수를 작성합니다. 그것은 그 운영이 원자이고 스레드의 변화에 대한 가시성을 제공합니다. 모델은 동시 실행에서 행동의 순서를 결정하는 일 행동 관계와 같은 개념을 소개합니다.

실제 예제

하나의 스레드가 공유 된 변수와 다른 스레드가 그것을 읽는 간단한 예를 고려하십시오. 적절한 동기화없이, 독서 스레드는 캐싱 또는 재주문으로 인해 stale 데이터를 볼 수 있습니다. 동기화 블록 또는 휘발성 변수를 사용하여 JMM 규칙에 따라 가시성을 보장합니다.

일반적인 문제 및 솔루션

  • Data Races: 여러 스레드가 동기화 없이 공유 데이터를 수정할 때 Occur. 이 방지하기 위해 동기화된 블록 또는 원자 클래스를 사용합니다.
  • Visibility Problems: 다른 사람에게 쓰이지 않는 변경. ]volatile] 또는 명시된 동기화를 공유하는 데 사용.
  • 주문: Compiler 또는 CPU 주문은 예상치 못한 행동을 일으킬 수 있습니다. Proper 동기화는 재주문 문제를 방지합니다.