ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • wait(), notify()
    공부/Java 2024. 5. 14. 17:38

    wait(), notify()

     

    - 동기화의 효율을 높이기 위해 사용한다.

    ※ 동기화로 데이터를 보호하는 것은 좋지만 해당 락을 기다리느라 다른 효율이 떨어지기 때문

    - Object 클래스에 정의되어 있으며, 동기화 블럭 내에서만 사용할 수 있다.

    • wait() - 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.
    • notify() - waiting pool에서 대기중인 쓰레드 중 하나(지정불가)를 깨운다.
    • notifyAll() - waiting pool에서 대기중인 모든 쓰레드를 깨운다.

     

    wait()으로 사용하려는 쓰레드의 lock을 풀어야지만 사용할 수 있다.

    하려고 하는 동작을 수행한 후 notify()를 사용하면, 쓰레드가 다시 lock을 획득한다.

    이러면 데이터는 보호되면서도 쓰레드가 병렬적으로 잘 작동하게 된다.

    두 메서드를 적절하게 사용하면 속도나 효율 면에서 훨씬 좋다.

     

     

    요리사와 손님을 생각하면 좋다.

    요리사는 손님에게 요리를 모두 제공하면 대기(wait()) 하고, 음식을 추가하면 손님에게 통보(notify())한다.

    손님은 음식이 없으면 대기(wait())하고, 음식을 다 먹고 나면 요리사에게 통보(notify())한다.

     

     

    wait()과 notify()는 쓰레드를 깨울 때 랜덤된 쓰레드가 깨워지게 된다.

    특정 쓰레드를 깨우고 싶다면 락과 컨디션을 사용해야 한다.

    락과 컨디션은 추후 작성하겠다.

    '공부 > Java' 카테고리의 다른 글

    함수형 인터페이스  (0) 2024.05.17
    람다식(Lambda Expression)  (0) 2024.05.16
    쓰레드의 동기화(synchronization)  (0) 2024.05.13
    join(), yield()  (0) 2024.05.13
    suspend(), resume(), stop()  (0) 2024.05.12
Designed by Tistory.