동기화 메서드
synchronized void testFunc()
- critical section 기반 동기화 기법으로 메서드 코드 전체를 임계 영역으로 설정
- 메서드를 여러 스레드에서 호출하더라도 동시 실행이 허용되지 않음
- 특정 스레드가 동기화 메서드 호출하고 코드가 실행외는 동안 다른 스레드에서 동기화 메서드 호출할 경우 BLCOKED 상태로 전환
모니터 락 동작 순서
- (호출자) 스레드가 synchronized 메서드 혹은 코드 블록을 호출 시 모니터 락을 요청
- 타 스레드가 모니터 락을 이미 점유하고 있다면 모니터 락을 요청한 스레드는 Runnable 에서 Blocked 로 전환
- 기존 모니터 락 점유 스레드가 구간을 벗어나 모니터 락을 해제하면 Blocked 상태로 대기 중인 스레드 중 하나가 락을 얻고 동기화 구간에 진입(코드 구간에 대한 원자성 보장)
참고로 synchronized 쓰면 워킹 메모리와 메인 메모리 동기화도 포함되는 것.
- volatile: 가시성만 보장
- synchronized: 가시성 + 상호배제 둘 다 보장