JAVA/포스팅

자바 쓰레드 notify()

짜집퍼박사(짜박) 2023. 11. 22. 00:47

notify() 메서드는 대기 중인 하나의 쓰레드를 깨워 실행할 수 있도록 하는 자바의 쓰레드 동기화 메서드 중 하나입니다. 이 메서드는 Object 클래스에서 상속되었기 때문에 모든 자바 객체에서 사용할 수 있습니다.

notify() 메서드는 다음과 같이 사용됩니다.

synchronized (obj) {
    // 어떤 조건이 충족되면
    obj.notify(); // 대기 중인 하나의 쓰레드를 깨움
    // 다른 작업 수행
}

여기서 obj는 객체를 나타내며, synchronized 블록 안에서 호출되어야 합니다. notify() 메서드는 현재 객체에 대해 대기 중인 하나의 쓰레드를 임의로 선택하여 깨웁니다. 이때, 깨어난 쓰레드는 락을 다시 획득하고 wait() 메서드에서 깨어나게 됩니다.

 

주의사항

- notify() 메서드는 synchronized 블록 내에서 호출되어야 합니다.
- notify()를 호출한 쓰레드는 해당 블록이 끝날 때까지 락을 반납하지 않습니다.
- notify()를 호출해도 실제로 어떤 쓰레드가 깨어날지는 정해져 있지 않습니다. 쓰레드 스케줄러에 의해 결정됩니다.
- notify() 메서드는 대기 중인 쓰레드 중 하나만을 깨우고, 나머지는 계속 대기 상태로 유지됩니다.
- notifyAll() 메서드는 notify()와 비슷하지만 대기 중인 모든 쓰레드를 깨웁니다. notifyAll()을 사용하면 대기 중인 모든 쓰레드가 조건을 다시 확인하게 되므로, 여러 쓰레드가 조건을 충족할 수 있을 때 유용합니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 쓰레드 Lock을 이용한 동기화  (0) 2023.11.22
자바 쓰레드 Lock  (0) 2023.11.22
자바 쓰레드 wait()  (0) 2023.11.22
자바 쓰레드 synchronized를 이용한 동기화  (0) 2023.11.21
자바 쓰레드의 동기화  (0) 2023.11.21