inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

더 자바, Java 8

CompletableFuture 2

CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다

231

당황한 멧돼지

작성한 질문수 2

0

안녕하세요.

아래 코드를 실행 시키면, hello 만 출력이 되어야 될것 같은데..world 도 같이 출력이 됩니다. get() 을 하면 동일 scope 에 있는 모든 CompletableFuture 가 실행이 되는것이 맞는 건지 문의 드려요.

 

감사합니다.

 

CompletableFuture<String> hello = CompletableFuture.supplyAsync(
        () -> {
          System.out.println("Hello Thread : " + Thread.currentThread().getName());
          return "Hello";
        }
);

CompletableFuture<String> world = CompletableFuture.supplyAsync(
        () -> {
          System.out.println("World Thread : " + Thread.currentThread().getName());
          return "World";
        }
);

hello.get();

java

답변 2

1

백기선

AI가 댓글을 잘 달았네요. get()하나가 모든 Future를 기다리는건 아닙니다. 그리고 get()은 명시적으로 기다릴 뿐이지, get()을 호출하지 않는다고 Future가 실행이 되지 않는건 아닙니다.

get()을 쓰는 이유는 저 프로그램을 실행한 main 쓰레드가 끝나면 Future가 메시지를 출력하기도 전에 끝나버릴 수 있어서 get()을 사용해서 main 쓰레드가 Future를 기다렸다가 끝낼 수 있도록, 그래야 Future가 메시지를 출력하는지 확인할 수 있으니 그렇게 한 것입니다.

0

당황한 멧돼지

앗! 친히 답글주셔서 감사합니다.

항상 영상과 강의 잘 보고 있어요. ^^



0

인프런 AI 인턴

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

CompletableFuture.get()를 호출하실 때, 동일 scope 내의 다른 CompletableFuture가 실행되는 것이 아닙니다. CompletableFuture는 각각 독립적으로 비동기 실행됩니다. 여기서 hello.get()을 호출하면, hello가 실행을 완료할 때까지 기다립니다. 그러나, helloworld는 각각 비동기로 실행되기 시작했기 때문에, get()을 호출하기 전에 이미 world가 실행되어 “World Thread : …“가 출력될 수 있습니다.

get() 메소드는 해당 비동기 작업(hello)의 완료를 기다리고 결과를 반환하지만, 다른 비동기 작업(world)의 실행을 제어하거나, 동기화하지는 않습니다. 따라서, 코드 내에서 world 실행이 시작되었을 때, hello.get() 호출로 인해 hello의 완료만 기다리게 되고, world는 독립적으로 실행되어 완료되기 때문에 “World”도 출력되는 것입니다.

님의 질문에 답변이 되었길 바랍니다. 추가적인 궁금증이 있으시면 말씀해주세요.

기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)

0

515

2

static 과 metaspace 관련 질문있습니다.

0

707

0

Map의 가장 큰 특징이 key는 null이 아니다

0

2377

2

Optional 질문드립니다.

0

469

0

인텔리제이 콘솔창

0

579

0

Supplier를 쓰는 이유

0

1355

1

allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드

0

706

1

[참고] LTS주기

0

468

1

orElseThrow()

1

1082

2

findFirst함수

0

357

1

메서드 레퍼런스

1

477

1

primitive type 질문

0

301

1

FunctionalInterface 상속 관계 질문

0

292

1

함수형 인터페이스를 왜 사용하나요?

1

496

1

while문 세미콜론

0

430

1

flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!

0

404

1

람다식과 익명 클래스

0

318

1

steam api 예제 git 주소

3

782

1

thread.sleep질문

0

383

2

.orElse 매개변수 질문

0

260

1

isPresent( ) 와 null 질문

0

333

1

예제 코드 질문

2

286

1

코드 질문있습니다.

0

233

1

java 11 버전 설치 질문

5

347

1