스레드 공부중인데요..그 상태나타내는 그부분이 너무 어려워요.
이해가 안되는 부분이 main에서
Producer 쓰레드를 실행을 하기시작하면 for문에서 DataBox클래스의 setData를 호출하는데요,
setData에서 this.Data가 인스턴스 생성할때 아무값도 안주었기때문에 null 값이므로 if문은 실행을 안하고
바로 출력을 하는건 알겠는데요..
그후 notify()부분이 이해가 안갑니다. notify 메소드는 책에서 wait()에 의해 실행 정지된 모든 스레드들을 실행대기 상태르 만든다고 되어있는데요..
제일 먼저 실행된건 Producer 스레드인데 어떻게 wait() 메소드가 실행되는지 궁금합니다..
실제로 제가 getData try문에 아무문장이나 출력을 해보앗는데요.. 실행결과를보면 저게 먼저 실행된다고 나와있네요...
저 문장이 실행된거보면 getData의 wait()도 실행됐다는 뜻인데 왜 저ㅏ게 먼저 실행되었나요?..이해가 잘안가요 ㅠ
setData의 norify()가 실행되려면 실행정지된 스레드가 있어야 맞기는한데..메인 함수에서 Producer 스레드를 먼저실행했는데 왜 저게 먼저 실행됐는지..
스레드가 우선순위가 같으면 실행순서?를 예측하기 힘들다지만 동기화도 걸려있는데ㅠㅠ
if 문 안 들어가면 wait 안 하지 notify는 wait 한 애들 아무도 없어도 할 수 있어 그러면 별 일이 안 일어나지
선생님 notify가 wait한애들 없어도 실행대기상태로 만드는걸 알겠는데여,,근데 왜 getData먼저 실행됐나요?