inflearn logo
강의

講義

知識共有

バックエンド開発者のパフォーマンス改善の基礎を築く

非同期方式を活用してみる

ExecutorService와 CompletableFuture의 차이점과 역할

262

EunKyung Hwang

投稿した質問数 2

0

안녕하세요! 비동기 코드에 관해 질문이 있습니다. ExecutorService 는 스레드를 관리하는 역할을 하는것이고 CompletableFuture 가 실제로는 비동기 요청을 처리하는 것으로 이해하였는데 맞을까요?

 

Future 은 예외 처리를 할 수 없기 때문에 잘 쓰이기 않을까요??CompletableFuture 가 지원하는 기능이 더 많기 때문에 주로 CompletableFuture 를 사용하나요?

java mysql spring-boot cache index

回答 2

1

incudev2

안녕하세요! EunKyung Hwang 님

 

-ExecutorService는 스레드 풀을 관리하고, 비동기 작업을 수행할 스레드를 제공

-CompletableFuture는 비동기 작업을 수행하고 결과를 처리하는 API

-추가로 CompletableFuture를 사용할 때 별도의 Executor를 명시적으로 설정하지 않으면, 내부적으로 ForkJoinPool.commonPool()을 사용

 

CompletableFuture는 Future을 단점을 보완하여 나온것으로 Future 단점을 키워드로 찾아보는 것을 추천드립니다.!

 

감사합니다!

0

communityai8509

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

비동기 프로그래밍에서 ExecutorServiceCompletableFuture의 역할과 차이점에 대해 질문하셨군요.

  1. ExecutorService

    • 역할: Java에서 ExecutorService는 스레드 풀을 관리하는 인터페이스로, 스레드의 생성을 제어하고, 실행을 관리하며, 종료 및 기타 상태 정보를 처리합니다. 주로 스레드 생성을 제어하고, 작업을 스레드 풀 내에서 비동기적으로 실행하기 위해 사용됩니다.
    • 관련 링크: ExecutorService Java Documentation
  2. CompletableFuture

    • 역할: CompletableFuture는 Java 8에서 도입된 클래스로, 비동기 프로그래밍을 더 직관적이고 강력하게 수행할 수 있도록 도와줍니다. CompletableFuture는 비동기 작업을 처리하고, 작업 완료 후에 콜백 메소드(예: thenApply, thenAccept, exceptionally 등)를 이어붙여 후속 작업을 처리하는 방식으로 사용할 수 있습니다.
    • 장점: 비동기 작업의 결과를 기다리거나 비동기 작업이 완료된 각각의 특정 시점에 작업을 수행하고자 할 때 유용합니다. 또한, 예외 처리를 위한 메소드도 제공하여 예외 발생 시의 적절한 대응을 쉽게 할 수 있습니다.
    • 관련 링크: CompletableFuture Java Documentation
  3. Future와의 비교

    • Future는 비동기로 작업의 결과를 받을 수 있는 방법을 제공하는 기본 인터페이스이지만, 블로킹 방식으로 결과를 기다리거나 예외를 적절히 처리하는데 있어 한계가 있었습니다.
    • CompletableFuture는 보다 풍부한 기능 셋을 제공하여 비동기 프로그래밍 패턴을 유연하고 효율적으로 구현할 수 있으며, 이는 Future에 비해 더욱 강력한 사용성을 제공합니다. 그로 인해, 많은 경우 CompletableFuture가 더 선호됩니다.

이와 관련된 추가적인 질문이나 궁금한 사항이 있다면 언제든지 말씀해 주세요.

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

비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항

0

30

1

script Validate가 안됩니다.

0

56

1

thread pool

0

45

1

ngrinder 설치관련

0

129

1

캐싱 데이터가 안보입니다.

0

136

2

섹션4: Ngrinder를 통한 성능 개선 확인 에서 사용하는 예제 코드

0

212

2

현업에서의 부하테스트 및 Ngrinder 설치

0

347

2

인덱스 활용 질문

0

333

2

프로젝트 적용하는데 어려움이 있어 질문드립니다.

0

306

1

nGrinder validate가 안됩니다.

1

739

2

EhCacheManagerFactoryBean

0

406

2

인텔리제이 EditConfiguration 옵션 추가하는 방법 [ 공유O 질문X ]

2

511

2

프로젝트 공유

1

438

2

scouter client

0

387

2

스카우터 설치

0

492

2

생각보다 부하 테스트가 CPU를 많이 타는거 같은데 정상이겠죠?

0

361

1

로컬에서 성능 테스트하는 것이 어떨 때 유의미한가요?

0

957

1

nginder script작성 후 실행 후 Connection refused에러

0

749

2

scouter C드라이브 말고 다른 곳에서 실행 시 NoSuchFile 오류

0

415

2

java17환경에서 scouter 실행법 문의

1

1035

2

첫번째 회사에서 서비스 회사로 이직하실때 준비

0

378

1

ngrinder-agent 실행 문제(Unmapped relationship: 7)

0

372

1

ngrinder쪽에 스크립트 클릭시 오류

0

783

3

findNoticeByDates 실행 에러

1

247

2