면접질문 - 동기화 synchronized

잠자는 고양이·2025년 5월 21일
0

Java

목록 보기
62/73

질문1. synchronized 의 작동 방식은 어떻게 되나요 ?

  • 내부적으로 객체의 "monitor lock"을 사용하여 동기화를 보장함

  • Monitor는 특정 객체 또는 클래스에 대한 고유 락(lock)을 관리하는 역할을 함

  • java에서 모든 객체(Object)는 기본적으로 하나의 모니터 락을 가지고 있음

  • synchronized 가 사용되면, 스레드는 해당 객체의 모니터 락을 획득해야만 실행할 수 있음

  • 즉 synchronized키워드를 사용하면 JVM은 monitor lock얻을 때까지 다른 스레드를 대기시키고, 락을 해제해야만 다음 스레드가 실행됨

    1. 스레드가 synchronized 코드에 진입. 해당 객체의 모니터 락을 획득하려고 시도
    1. 락을 획득하면 코드 실행. 실행 중 다른 스레드는 해당 객체에 접근 불가 (대기)
    1. 코드 실행 완료 후 락 해제

질문2.synchronized를 사용하면 어떤 문제점이 발생할 수 있나요 ?

  • 잘못 사용이 되면 성능 저하, 데드락, 공정성 문제 (starvation)등 다양한 문제가 발생할 수 있음
    1. 성능 저하 (blocking)
  • synchronized는 한 번에 하나의 스레드만 실행 가능하도록 설정하므로 병렬 처리를 방해함
    1. 데드락(deadlock)
  • 두 개 이상의 스레드가 서로 상대방의 락을 기다리면서 영원히 멈추는 상태를 데드락이라고 함
  • synchronized 를 사용할 때 잘못된 순서로 락을 획득하면 데드락이 발생할 수 있음
    1. 공정성 문제(starvation)
  • 스레드가 락을 가져오는 순서를 보장하지 않기 때문에 어떤 스레드는 계속 실행되지 못할 수 있음

질문3. 동기화를 위해 synchronized 외 다른 방법은 무엇이 있고, 어떤 차이점이 있나요?

  • ReentrantLock이 존재함

  • ReentrantLock은 synchronized 보다 정교한 락 제어가 가능함

  • 락을 명시적으로 획득(lock) 하고 해체(unlock)해야 함

  • 더 유연한 동기화가 가능함 (tryLock(), locklnterruptidly() 등을 지원함)

  • ReentrantLock이 더 유용한 경우

  • 더 정교한 제어 가능

  • 공정성 모드 설정 가능 (true로 설정 시 가장 오래 대기한 스레드가 먼저 실행)

  • 동기화 블록을 여러 메소드에 걸쳐 적용 가능

profile
개발자가 되고 싶은 잠자는고양이

0개의 댓글