-
쓰레드의 동기화(synchronization)공부/Java 2024. 5. 13. 19:20
쓰레드의 동기화(synchronization)
- 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.
- 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요하다.
쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것
- 동기화하려면 간섭받지 않아야 하는 문장들을 '임계 영역'으로 설정한다.
- 임계 영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입 가능하다. (객체 1개에 락 1개)
synchronized(키워드)를 이용한 동기화
- synchronized로 임계영역(lock이 걸리는 영역) 설정하는 방법
1. 메서드 전체를 임계 영역으로 지정하기
public synchronized void calcSum() {
// ....
}
2. 특정한 영역을 임계 영역으로 지정
synchronized (객체의 참조변수) {
// ....
}1번은 반환타입 앞에 synchronized를 붙인다.
이렇게 하면 메서드 전체가 임계영역(critical section)이 된다.
임계 영역은 한 번에 한 쓰레드만 사용할 수 있기 때문에 영역을 최소화하는 것이 좋다
※ 임계 영역이 넓을 수록 효율이 떨어지니까
2번이 더 한정적인 영역을 임계 영역으로 삼기 때문에 더 효율적이다.
'공부 > Java' 카테고리의 다른 글
람다식(Lambda Expression) (0) 2024.05.16 wait(), notify() (0) 2024.05.14 join(), yield() (0) 2024.05.13 suspend(), resume(), stop() (0) 2024.05.12 sleep(), interrupt() (0) 2024.05.10