동기화 (Synchronized)

조상원·2025년 8월 2일

JAVA

목록 보기
31/34
  • 동시에 접근하는 걸 제어하는 것
  • 동기화는 스레드가 사용 중인 객체의 작업이 끝날 때까지 사용 중인 객체에 잠금을 걸어서 다른 스레드가 접근할 수 없도록 한다.
  • 자바는 동기화를 위해 동기화 메소드와 동기화 블록을 제공하는데 스레드가 객체 내부에 동기화 메소드 또는 동기화 블록을 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 객체에 접근하지 못하도록 한다.
  • 동기화 메소드와 동기화 블록이 객체 내에 여러 개 있을 경우 스레드가 이들 중 하나를 실행하면 다른 스레드는 해당 메소드는 물론이고 객체 내의 다른 동기화 메소드 및 동기화 블록도 실행할 수 없다.
  • 동기화 메소드는 선언부에 synchronized 키워드를 붙이면 된다
// 메소드에 synchronized 키워드를 사용하여 동기화 메소드로 만든다.
public synchronized void 메소드명() {

}

// 정적 메소드도 synchronized 키워드를 사용하여 동기화 메소드로 만들 수 있다.
public static synchronized void 메소드명() {

}
  • 메소드 전체 내용이 아니라 일부 내용만 동기화하고 싶을 때는 동기화 블록을 만들면 된다.
public void 메소드명() {
    ... 
    
    // 괄호() 안에는 공유 객체를 지정하는데 보통 this를 지정한다. 
    syschronized(this) { 
        ...
    }
}

0개의 댓글