작성
·
76
·
수정됨
0
Thread 가 Wating 상태로 변경될 때
java 에서 Object.wait() 혹은 Thread.join() 을 호출 한다고
스레드 생명주기와 상태 - 21:51
에서 말씀 주셨는데
래퍼런스를 확인해보니 wait(), join() 이외에 LockSupport.park ()라는 동작도 있다고 적혀있습니다.
해당 동작은 어느시점에 이루어지는지 언제까지 대기상태를 유지하는지 궁금합니다 🙂
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
JuNu님, Java에서 스레드가 WAITING 상태로 변경되는 시점과 관련된 질문에 대해 답변드리겠습니다.
Object.wait()
, Thread.join()
외에 LockSupport.park()
도 스레드를 대기 상태로 변경시킬 수 있습니다. LockSupport.park()
를 호출하게 되면, 스레드는 다른 스레드가 LockSupport.unpark(Thread)
를 호출할 때까지 대기 상태를 유지하게 됩니다. 이 방법은 다른 wait/notify와 유사하게 특정 조건이 만족될 때까지 스레드를 블록킹할 수 있도록 합니다.
스레드가 WAITING 상태에서 벗어나기 위해서는 다음과 같은 조건이 필요합니다:
Object.wait()
: 다른 스레드가 해당 객체 모니터에 대해 notify()
나 notifyAll()
을 호출해야 합니다.Thread.join()
: 대기 중인 스레드가 종료될 때까지 기다립니다.LockSupport.park()
: LockSupport.unpark()
가 호출되어야 합니다.각 방법에 대해 스레드는 기본적으로 다른 스레드의 동작(예: notify()
, unpark()
등)에 의해 대기 상태를 해제하게 됩니다. 이를 이해하는데 참고가 되셨기를 바랍니다.
추가적인 질문이 있으시면 언제든지 물어봐 주세요! 😊
자세한 이미지는 아래 링크를 참고해주세요:
이미지 링크