인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

JuNu님의 프로필 이미지

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

스레드 생명주기와 상태

Thread Waiting 상태 관련 질문 드립니다.

작성

·

76

·

수정됨

0

Thread 가 Wating 상태로 변경될 때
java 에서 Object.wait() 혹은 Thread.join() 을 호출 한다고
스레드 생명주기와 상태 - 21:51

에서 말씀 주셨는데
래퍼런스를 확인해보니 wait(), join() 이외에 LockSupport.park ()라는 동작도 있다고 적혀있습니다.

image.png

 

해당 동작은 어느시점에 이루어지는지 언제까지 대기상태를 유지하는지 궁금합니다 🙂


답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

JuNu님, Java에서 스레드가 WAITING 상태로 변경되는 시점과 관련된 질문에 대해 답변드리겠습니다.

Object.wait(), Thread.join() 외에 LockSupport.park()도 스레드를 대기 상태로 변경시킬 수 있습니다. LockSupport.park()를 호출하게 되면, 스레드는 다른 스레드가 LockSupport.unpark(Thread)를 호출할 때까지 대기 상태를 유지하게 됩니다. 이 방법은 다른 wait/notify와 유사하게 특정 조건이 만족될 때까지 스레드를 블록킹할 수 있도록 합니다.

스레드가 WAITING 상태에서 벗어나기 위해서는 다음과 같은 조건이 필요합니다:

  1. Object.wait(): 다른 스레드가 해당 객체 모니터에 대해 notify()notifyAll()을 호출해야 합니다.
  2. Thread.join(): 대기 중인 스레드가 종료될 때까지 기다립니다.
  3. LockSupport.park(): LockSupport.unpark()가 호출되어야 합니다.

각 방법에 대해 스레드는 기본적으로 다른 스레드의 동작(예: notify(), unpark() 등)에 의해 대기 상태를 해제하게 됩니다. 이를 이해하는데 참고가 되셨기를 바랍니다.

추가적인 질문이 있으시면 언제든지 물어봐 주세요! 😊

자세한 이미지는 아래 링크를 참고해주세요:
이미지 링크

JuNu님의 프로필 이미지

작성한 질문수

질문하기