본문 바로가기
카테고리 없음

Synchronized란

by 개발초보입니다 2023. 12. 26.

Synchronized란

Synchronized는 Java에서 사용되는 키워드로, 다중 스레드 환경에서의 동기화를 달성하기 위해 사용됩니다.

Synchronized 키워드는 두 가지 주용 목적으로 사용됩니다.


1. 메서드 레벨 동기화

  • 메서드에 Synchronized 키워드를 사용하면 해당 메서드를 임계 영역(critical section)으로 만들어 다중 스레드 간의 안전성을 보장합니다.
  • 여러 스레드가 동시에 해당 메서드를 호출 하려고 할 때, 하나의 스레드만이 접근할 수 있고, 다른 스레드들은 대기 상태로 들어갑니다.
  • 다른 스레드가 임계 영역을 빠져나갈 때까지 대기하고, 그 후에 다음 스레드가 진입할 수 있습니다.

예시 코드

public synchronized void synchronizedMethod() {
    // 메서드 내용
}

2. 블록 레벨 동기화

  • 특정 코드 블록을 Synchronized  키워드로 감싸면 해당 블록을 임계 영역으로 만들어 동기화를 수행합니다.
  • 객체의 모니터 락을 획득하여 다른 스레드들이 해당 블록에 접근하지 못하도록 합니다.

예시 코드

public void someMethod() {
    // 비동기 코드
    
    synchronized (lockObject) {
        // 동기화가 필요한 코드 블록
    }
    
    // 비동기 코드
}

동기화는 다중 스레드 환경에서 공유 자원에 대한 접근을 조절하여 데이터 일관성과 안전성을 보장하기 위해 사용됩니다.

그러나 과도한 동기화는 성능 문제를 초래할 수 있으므로, 필요한 부분에만 적절히 동기화를 적용하는 것이 중요합니다.

 

또한, Java5 부터는 java.util.concurrent 패키지에서 제공하는 동시성 유틸리티 클래스들을 사용하여 동기화를 더 세밀하게 조절할 수 있습니다.

이러한 클래스들은 Synchronized  키워드보다 더 효율적이며 다양한 동기화 전략을 제공합니다.