synchronized 키워드 이해도 체크

2025. 4. 28. 14:01·언어/Java

1 - 40억까지 더하는 코드를 n 개의 스레드로 병렬로 돌아가도록 짜 보세요.

  • 각 스레드가 서로 다른 범위를 나눠서 합계를 구하고,
  • main 스레드는 join()으로 모든 스레드가 끝날 때까지 기다리는 방식을 사용합니다.
     
Thread t1 = new Thread(() -> { /* 1 ~ 10억 합 */ });
Thread t2 = new Thread(() -> { /* 10억+1 ~ 20억 합 */ });
...
t1.start();
t2.start();

t1.join();  // main 스레드는 여기서 대기
t2.join();
  • join(): 스레드가 끝날 때까지 main 스레드가 대기하게 만듭니다.
  • 이렇게 하면 main 스레드가 모든 작업이 끝난 뒤 결과를 처리할 수 있어요.

synchronized 메서드의 동기화 대상은 누구인가?

  • 인스턴스 메서드에 synchronized를 붙이면 → 그 인스턴스(this)의 모니터 락이 걸립니다.
public synchronized void instanceMethod() { 
    // this 객체에 락이 걸림
}
  • 같은 인스턴스의 synchronized 메서드는 동시에 실행되지 않아요.
  • 하지만 다른 인스턴스끼리는 서로 독립적으로 실행됩니다.

static synchronized 메서드의 경우 1과 같은가 다른가?

  • static synchronized 메서드는 → 그 클래스의 Class 객체에 락을 걸어요.
  • 여기서 MyClass.class는 JVM에서 해당 클래스 정보를 담는 객체(java.lang.Class 타입)입니다.
public static synchronized void staticMethod() { 
    // MyClass.class 객체에 락이 걸림
}

synchronized block 의 괄호 안에는 무엇을 넣어줘야 할까?

  • 괄호 안에는 락을 걸 대상(Object) 을 넣어야 해요.
  • 즉, 모니터 락을 걸고 싶은 객체를 지정하는 거예요.
synchronized (lockObject) {
    // lockObject의 모니터 락을 획득한 후 실행
}
  • lockObject로는:
    • this → 인스턴스 락
    • MyClass.class → 클래스 락
    • new Object() → 별도 락 전용 객체

'언어 > Java' 카테고리의 다른 글

Executor 프레임워크2 - Executor 프레임워크가 등장한 이유  (0) 2025.04.30
Executor 프레임워크1 - 스레드를 직접 사용할 때 문제점  (0) 2025.04.30
Set은 왜 내부적으로 Map을 사용할까?  (0) 2025.04.22
TreeSet은 왜 이진 탐색 트리 대신 레드-블랙 트리를 사용할까?  (0) 2025.04.22
제네릭 타입 소거  (0) 2025.04.21
'언어/Java' 카테고리의 다른 글
  • Executor 프레임워크2 - Executor 프레임워크가 등장한 이유
  • Executor 프레임워크1 - 스레드를 직접 사용할 때 문제점
  • Set은 왜 내부적으로 Map을 사용할까?
  • TreeSet은 왜 이진 탐색 트리 대신 레드-블랙 트리를 사용할까?
gugbab2
gugbab2
국밥과 커피를 사랑하는 개발자 gugbab2 입니다.
  • gugbab2
    개발하는 프로 국밥러
    gugbab2
  • 전체
    오늘
    어제
    • 분류 전체보기 (48)
      • 프로젝트 (5)
      • 생각정리 (0)
      • Backend (0)
        • 소소한 백엔드 개발 이야기 (0)
        • Spring (0)
        • JPA (0)
      • 언어 (12)
        • Java (12)
      • CS (17)
        • 네트워크 (17)
      • 아키텍처 (14)
        • OOP (14)
        • TDD (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비동기
    공부하자
    객체지향
    객체
    설계
    하드웨어
    리뷰
    의존성
    타입
    개발블로그
    언어
    새해
    오브젝트
    MC-LAG
    개발자
    자바
    개발
    방화벽
    github
    제네릭
    스위치
    Executor
    happends-before
    LACP
    네트워크
    프로젝트
    비전공
    동시성
    책
    토큰
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gugbab2
synchronized 키워드 이해도 체크
상단으로

티스토리툴바