synchronized 키워드 이해도 체크
0. 1 - 40억까지 더하는 코드를 n 개의 스레드로 병렬로 돌아가도록 짜 보세요.
각 스레드가 서로 다른 범위를 나눠서 합계를 구하고,
main 스레드는 join()으로 모든 스레드가 끝날 때까지 기다리는 방식을 사용합니다.
join(): 스레드가 끝날 때까지 main 스레드가 대기하게 만듭니다.
이렇게 하면 main 스레드가 모든 작업이 끝난 뒤 결과를 처리할 수 있어요.
1. synchronized 메서드의 동기화 대상은 누구인가?
인스턴스 메서드에 synchronized를 붙이면 → 그 인스턴스(this)의 모니터 락이 걸립니다.
같은 인스턴스의 synchronized 메서드는 동시에 실행되지 않아요.
하지만 다른 인스턴스끼리는 서로 독립적으로 실행됩니다.
2. static synchronized 메서드의 경우 1과 같은가 다른가?
static synchronized 메서드는 → 그 클래스의 Class 객체에 락을 걸어요.
여기서 MyClass.class는 JVM에서 해당 클래스 정보를 담는 객체(java.lang.Class 타입)입니다.
🔍 인스턴스 메서드와의 차이:
메서드 유형
락 대상
인스턴스 메서드 (synchronized)
this 인스턴스의 모니터 락
static 메서드 (static synchronized)
클래스 객체(MyClass.class)의 모니터 락
그래서 인스턴스 락과 클래스 락은 서로 간섭하지 않습니다.
3. synchronized block 의 괄호 안에는 무엇을 넣어줘야 할까?
괄호 안에는 락을 걸 대상(Object) 을 넣어야 해요.
즉, 모니터 락을 걸고 싶은 객체를 지정하는 거예요.
lockObject로는:
this → 인스턴스 락
MyClass.class → 클래스 락
new Object() → 별도 락 전용 객체
Last updated