- notify()와 notifyAll()은 자바에서 스레드 간의 통신을 위해 사용되는 메서드
notify():
- notify() 메서드는 현재 객체의 모니터를 소유하고 있는 스레드 중 하나를 깨워서 실행을 재개
- notify() 메서드를 호출하면 대기 중인 스레드 중 한 개의 스레드만 실행을 재개하고, 나머지 스레드들은 여전히 대기 상태...!
- 선택적으로 특정 스레드를 깨울 수 있다
- 호출한 스레드와 동일한 모니터를 소유하고 있는 스레드 중 하나가 깨어난다
- notify() 메서드를 호출한 스레드와 동일한 모니터를 소유하고있는 스레드가 없다면, notify() 호출은 아무런 효과가 없다
notifyAll():
- notifyAll() 메서드는 현재 객체의 모니터를 소유하고 있는 모든 스레드를 깨워서 실행을 재개
- notifyAll() 메서드를 호출하면 대기 중인 모든 스레드가 실행을 재개
- notifyAll() 메서드를 호출하면 대기 중인 모든 스레드가 경쟁 상태에 들어가게 되고, 모니터를 소유하고 있는 스레드 중 하나만 실행을 계속
- notify() 와 마찬가지로 notifyAll() 메서드를 호출한 스레드와 동일한 모니터를 소유하고 있는 스레드가 없다면, notifyAll() 호출은 아무런 효과가 없다
이 두 메서드는 wait() 메서드와 함께 사용되어 스레드 간의 동기화를 달성하는 데 사용
- wait() 메서드는 스레드를 일시적으로 대기 상태로 만들고,
notify()나 notifyAll() 메서드를 호출하여 대기 중인 스레드를 깨워서 실행을 재개한다
'의문점 공부하기 > 📌 Java' 카테고리의 다른 글
📌 스레드 풀을 생성할 수 있는 여러가지 방법은 뭐가 있을까?????? (0) | 2023.07.31 |
---|---|
📌 thread run()과 thread start()의 차이가 뭘까? (0) | 2023.07.28 |
📌 sleep()과 wait()의 차이는?!?!? (2) | 2023.07.24 |
📌 스레드에 여러가지 상태가 있다??? (0) | 2023.07.21 |
📌 runnable과 callable의 차이는 무엇일까?? (3) | 2023.07.20 |