029 Method Synchronized

강의 메모 - synchronized 메서드 동기화 #

인스턴스 메서드 동기화 (synchronized method) #

  • 인스턴스 단위로 모니터가 동작하며 동일한 인스턴스 안에서 synchronized 가 적용된 곳은 하나의 락을 공유한다
  • 인스턴스가 여러개일 경우 인스턴스별로 모니터 객체를 가지므로 스레드는 모니터 별로 락을 획득해서 동기화 영역에 진입하고 빠져 나올 때 락을 해제 할 수 있다

img_1.png

  • MyClass 내부적으로 가지고있는 객체 타입 : this (=모니터)
  • 위 두 메서드의 모니터가 동일하다.

정적 메서드 동기화 (static synchronized method) #

  • 클래스 단위로 모니터가 동작하며 synchronized 가 적용된 곳은 하나의 락을 공유한다
  • 인스턴스와는 별개의 모니터를 가지고 임계 영역을 동기화 하기 때문에 인스턴스 단위로 메서드를 호출할지라도 락은 클래스 단위로 스레드간 공유된다
  • 클래스는 메모리에 오직 하나만 존재하므로 하나의 모니터를 공유해서 동기화 하고자 할 때 사용 할 수 있다

img_2.png

  • 정적메서드이기 때문에 클래스 타입으로 주어짐 -> MyCalss = monitor

인스턴스 메서드 동기화 (synchronized method) + 정적 메서드 동기화 (static synchronized method) #

  • synchronized method 와 static synchronized method 가 혼용되었을 경우는 각 모니터별로 동기화를 진행한다
  • 모니터가 섞여 있기 때문에 동기화가 의도한대로 정확하게 동작하는지 주의가 필요하다

img_3.png

  • 위 1, 2 메서드의 모니터는 같다
  • 위 3,4 메서드의 모니터는 같다