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

감바스님의 프로필 이미지
감바스

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

Future2 - 분석

future.get()에 대해 질문 있습니다.

작성

·

107

0

  1. main 스레드에서 future.get()을 호출하면 결과값이 올때까지 다음 코드라인을 실행할 수 없는 상태가 된다고 보면 될까요?

  2. 앞서 스레드들은 락 대기 집합, 스레드 대기 집합 같은 곳에서 대기를 했는데요 future.get()을 한다면 main 스레드도 대기를 할곳이 필요해 보이는데 저런 대기 집합 장소가 따로 있는지 궁금합니다.

  3. 블로킹에 대한 개념을 보면서 동기/비동기, 블로킹/논블로킹에 대한 차이점에 대해 궁금해졌습니다. 구글링을 하면서 자료 조사를 했는데 여전히 헷갈리네요 혹시 간단하게 이 개념들의 차이점에 대해 설명해주실 수 있을까요

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 감바스님

1. future.get() 호출 시 블로킹 여부

네, 맞습니다. future.get()을 호출하면 해당 Future 객체가 반환할 결과값을 기다릴 때까지 현재 실행 중인 스레드(즉, main 스레드)는 블로킹 상태가 됩니다. future.get()을 호출한 시점에서 결과값이 즉시 반환되지 않으면 결과가 반환될 때까지 main 스레드는 대기하고, 그 이후에 다음 코드 라인이 실행됩니다. 따라서, future.get()은 블로킹 메소드입니다.

2. future.get() 대기 여부

future.get()을 호출한 스레드는 WAITING 상태로 전환됩니다. 이러한 대기 상태는 강의 초반에 설명드린 것 처럼 JVM과 운영체제의 스케줄러가 관리하며, 결과가 준비되면 다시 실행 가능한 상태로 전환됩니다.

3. 동기 비동기

다음 링크를 참고해주세요.

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

감사합니다.

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기