강의

멘토링

커뮤니티

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

sjahn님의 프로필 이미지
sjahn

작성한 질문수

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

Future4 - 이유

Future4-이유 질문

작성

·

17

0

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요.

Future를 거치는 SumTaskMainV2에서 future2.get()이 future1.get() 실행 후 task1의 call() 완료를 기다리지 않고 바로 실행되는 것을 콘솔 로그로 확인 가능했는데요.
그렇다면 Future를 거치지 않고 결과를 반환한다 가정할 때, task2가 task1 완료를 기다린 후 수행된다고 나와있는데,

"Future는 한 스레드 작업의 future1.get() 실행 후, 다른 스레드의 작업 future2.get()은 future1의 call() 완료까지 기다리지 않는 기능이 있다"
이렇게 이해해도 될까요?

답변 1

0

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

질문해주신 내용을 기반으로 이해를 돕기 위한 답변을 드리겠습니다.

Future의 동작 원리

  1. future.get()의 블로킹 특성: future.get()을 호출하면 해당 스레드(task)의 작업이 완료될 때까지 블로킹됩니다. 즉, future1.get()을 호출하면 future1이 완료될 때까지 현재 스레드가 대기하게 됩니다.

  2. 여러 Future 객체의 호출 순서: Future 객체가 여러 개 있는 경우 future1.get()이 완료된 후 future2.get()을 호출했을 때, future2의 스레드(task2)는 task1의 완료를 기다리지 않고 자신의 작업이 완료되었는지 확인합니다. 만약 작업이 완료되었다면 즉시 그 결과를 반환합니다.

질문의 핵심

질문하신 내용처럼 “Future는 future1.get() 후 다른 스레드의 future2.get()future1call() 완료까지 기다리지 않는 기능이 있습니다”는 이해는 조금 혼란스러운 부분이 있을 수 있습니다.

정확히 말하자면, 각 Future의 get() 호출은 각자의 작업 완료를 기다립니다. future2.get()future1의 완료 여부와 무관하게 task2의 작업 완료를 기다립니다. 따라서 task2task1의 완료 여부와 관계없이 자신의 작업을 독립적으로 수행하는 것이 맞습니다.

추가 자료

이와 관련된 보다 심화된 설명은 다음 게시글에서도 찾으실 수 있습니다:
- future.get()에 대해 질문 있습니다. - 이 게시글에서 Future의 블로킹 동작 원리에 대해 자세히 설명되어 있습니다.

혹시 더 궁금한 점이나 설명이 필요하신 부분이 있으시면, 추가로 문의해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sjahn님의 프로필 이미지
sjahn

작성한 질문수

질문하기