인프런 커뮤니티 질문&답변
unpark() 메서드 질문드립니다.
작성
·
81
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
여기에 질문 내용을 남겨주세요.
LockSupprot의 unpark()메서드는 park()와 parkNanos()로 WAITING상태이거나 TIME_WAITING상태에 빠진 스레드를 RUNNABLE상태로 깨우는 데 사용되는거면
sleep(ms)로 TIME_WAITING상태에 빠진 스레드를 unpark()로 깨울 수 없는건가요?
내용을 좀 더 찾아보니, LockSupport에서 스레드의 상태를 확인하기 위해 자체적으로 permit이라는 플래그값을 사용한다고 하는데, 그럼 결국 unpark는 LockSupport내의 메서드를 사용해서 대기 상태로 만든 스레드에 대해서만 작용하는 것인지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
hxhxhx님께서 질문하신 내용은 LockSupport 클래스의 unpark() 메서드에 관한 것입니다. 이 클래스는 스레드의 상태 관리에 있어 독특한 기능을 제공하는데, 특히 park()와 unpark() 메서드는 이러한 상태 관리를 위해 설계된 것입니다.
unpark()와 스레드 상태:unpark()메서드는park()나parkNanos()로 블록된 스레드를 깨우기 위해 사용됩니다. 이때,unpark()는 직접적으로 RUNNABLE 상태로 전환시키는 방법이 아니라,LockSupport내부에서 관리하는permit이라는 플래그를 활용합니다. 이 플래그가 설정되면, 해당 스레드가park()로 있던 상태에서 나올 수 있게 됩니다.sleep()와unpark()관계: 일반적으로sleep(ms)로 인해 TIME_WAITING 상태인 스레드는unpark()로 직접 깨울 수 없습니다.sleep()는LockSupport의 메커니즘과 다르게 자바Thread클래스의 기능을 사용하는 것으로, 내부적으로 기본 타이머를 통한 대기를 수행하고park()나parkNanos()와는 다른 방식으로 동작합니다. 그러므로unpark()는sleep()로 잠들어 있는 스레드에 영향을 주지 않습니다.LockSupport의 고유 플래그 사용:LockSupport는permit이라는 플래그를 내부적으로 사용하여 스레드의 대기 및 실행 상태를 제어합니다. 이 플래그는LockSupport의 메서드를 호출할 때 유효하며,park()나unpark()는 이 플래그와 함께 작동합니다. 따라서,LockSupport메서드를 사용하지 않고 대기 상태에 빠진 일반적인 스레드에는unpark()가 직접적으로 영향을 미치지 않습니다.
아래의 참고 자료들은 LockSupport 클래스와 unpark에 관련된 자세한 설명입니다.
- LockSupport의 역할과 사용법: 스레드의 상태를 관리하는
LockSupport클래스의 사용법과 특징에 대한 설명입니다.
- 스레드 상태 관리 방법: 스레드의 다양한 상태와 관련 관리 방식에 대해 이해할 수 있는 게시물입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





