1. 임계영역 : 한 번에 한 개의 쓰레드만 접근 가능한 영역
synchronized로 임계영역을 설정하는 방법 2가지
public synchronized void calcSum(){
// Do Something
}
synchronized(참조변수){
// Do Something
}
2. wait()과 notify()
동기화의 효율을 높이기 위해 사용
Object 클래스에 정의되어 있으며 동기화 블록 내에서만 사용 가능하다.
wait(): 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다
notify(): waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다.
notifyAll(): waiting pool에서 대기중인 모든 쓰레드를 깨운다.
Customer 쪽에서는 자원이 없을 때 wait()으로 lock을 반납하고,
Provider 쪽에서는 자원이 추가되었을 때 notify()로 Customer에게 자원추가를 통지한다.
3. wait(), notify()를 쓰면 대상이 불분명하다는 단점이 존재
이를 해결하기 위해 나온게 Lock & Condition
4. Lock & Condition
추후 추가 예정
반응형
'Knowledge Wiki > Java' 카테고리의 다른 글
JAVA 함수형 인터페이스, function 패키지 (0) | 2021.12.01 |
---|---|
JAVA 람다식 (0) | 2021.12.01 |
JAVA 쓰레드 (0) | 2021.12.01 |
JAVA Runtime 에러를 줄이기 위한 노력 (0) | 2021.12.01 |
JAVA 제네릭 (0) | 2021.12.01 |