== 동기화 스레드 ==
싱글 스레드 프로그램에서는 1개의 스레드가 객체를 독차지해서 사용하면 되지만, 멀티 스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있습니다. 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어서 다른 스레드가 사용할 수 없도록 해야 합니다.
멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역을 임계 영역(critical section)이라고 합니다. 자바는 임계 영역을 지정하기 위해 동기화(synchronized) 메소드를 제공합니다. 스레드가 객체 내부의 동기화 메소드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동기화 메소드를 실행하지 못하도록 합니다.
동기화 메소드를 만들려면 다음과 같이 메소드 선언에 synchronized 키워드를 붙이면 되는데, 인스턴스와 정적 메소드 어디든 붙일 수 있습니다.
<nowiki>
public synchronized void method() {
임계 영역; // 단 하나의 스레드만 실행
}
</nowiki>
동기화 메소드는 메소드 전체 내용이 임계 영역이므로 스레드가 동기화 메소드를 실행하는 즉시 객체에는 잠금이 일어나고, 스레드가 동기화 메소드를 실행 종료하면 잠금이 풀립니다.
만약 동기화 메소드가 여러 개 있을 경우, 스레드가 이들 중 하나를 실행할 때 다른 스레드는 해당 메소드는 물론이고 다른 동기화 메소드도 실행할 수 없습니다. 하지만 이때 다른 스레드에서 일반 메소드는 실행이 가능합니다.
[[분류:자바]]