앞선 아티클에서 공유 객체를 사용하는 과정에 대해서 살펴보았습니다. 그럼 반대로 한 객체를 특정 스레드가 사용 중일 때 다른 스레드가 변경할 수 없도록 만드는 기능도 필요해질 것입니다.
멀티 스레드 체계에서 딱 하나의 스레드만 실행할 수 있는 영역을 임계 영역(critical seciton)이라고 칭하는데, 이 임계 영역은 동기화(synchronized) 메서드/블록을 통해서 설정이 가능합니다. 스레드가 어떤 객체 내부의 동기화 메서드 / 블록에 들어가면, 즉시 객체가 잠기며 다른 스레드가 해당 임계 영역의 코드를 실행하지 못하게 됩니다.
○ synchronized 사용법
기본적으로 동기화 메서드를 선언할 때는 메서드 선언에 synchronized 키워드를 포함하면 됩니다. 인스턴스, static에도 사용이 가능합니다.
public synchronized void method() {
// 임계영역
}
동기화 메서드의 경우 스레드가 동기화 메서드를 실행하면 즉시 객체에 잠금이 발생하고, 스레드가 동기화 메서드를 실행 종료하면 잠금이 풀리는 구조입니다.
만일 메서드 중 일부 내용만을 임계 영역으로 선언하고 싶을 경우에는 synchronized 블록을 선언할 수 있습니다.
public void method() {
// 여러 스레드 실행 가능한 영역
...
...
synchronized(공유객체) {
// 임계 영역
}
// 여러 스레드 실행 가능한 영역
...
...
}
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(5) - 스레드 상태 1 (0) | 2024.11.19 |
---|---|
멀티 스레드(4) - 동기화 메서드와 동기화 블록 3 (0) | 2024.11.18 |
멀티 스레드(4) - 동기화 메서드와 동기화 블록 1 (0) | 2024.11.11 |
멀티 스레드(3) - 스레드 우선순위 2 (0) | 2024.11.07 |
멀티 스레드(3) - 스레드 우선순위 1 (0) | 2024.11.06 |