wait 했다가 notify해주는거하고
sleep해주는거의 차이가 뭘까?
단지 슬립을할때는 시간을 정하고 시간이 되면 깨어나고 웨이트는 노티파이하기전엔 일어나지 않는다는 것?
그리고 Thread.sleep 거는거랑
쓰레드의 오브젝트로 Object.sleep 거는거랑
무슨 차이가 있는거지?
Thread.sleep은 현재 실행중인 쓰레드를 슬립시킨다는거고 오브젝트로 슬립거는거는 해당 쓰레드를 슬립한다는건가?
내가 생각하고 있는거외로 아는게 있는분은 답변바람
깨어나는 조건이 다른 거지. wait은 signal이 올 때 깨어나는 거고, sleep은 지정된 시간 이후에 깨어나는 거고. 그 차이 뿐임. wait-notify도 마찬가지지만 sleep도 1000 줬다고 정확히 1초가 sleep되는 게 아님. 깨어나는 건 태스크 스위칭이 이루어지면서 해당 스레드가 선택될 때 깨어나는 거니깐.
Thread.Sleep과 특정 스레드 객체에게 Sleep하는 건 만일 대상 스레드가 자기 자신이라면 어느 것을 해도 똑같음. 다만 특정 스레드 객체에게 Sleep을 하는 건 다른 스레드를 강제로 Sleep시킬 수 있다는 특징이 있지.
wait()는 모니터를 반납하고 wait_state 로 이동하고.... sleep은 모니터와 상관없이 cpu자원을 반납하는거고.. 그래서 모니터를 획득하고 critical section 안에서 sleep을 하면 다른 놈들(thread)은 바깥데에서 속절없이 대기타기만 함.
sleep은 어떤 작업을 주기적으로 해야할때... 이를테면 24시간마다 참조가 없는 태그들을 정리해다든가... 15초마다 원청 서버를 조회해서 요청을 읽어들인다든가... 이럴때 쓰지. wait-notify는 한정된 자원을 여러 스레드들이 번갈아가며 쓰는 경우같은거...컨퍼런스 자리 예약할때 두놈이 하나의 자리를 같이 예약하는 일이 없게 한다든가...
오 명확한 답변 고마워 그런 차이가 있었군