관리 메뉴

KorSA

JAVA 쓰레드 동기화 본문

Knowledge Wiki/Java

JAVA 쓰레드 동기화

Praiv. 2021. 12. 1. 18:03
320x100

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
    추후 추가 예정

728x90
728x90

'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
Comments