사용자 도구

사이트 도구


java:8:completable_future

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
java:8:completable_future [2016/07/16 15:25]
kwon37xi 만듦
java:8:completable_future [2020/11/09 11:47] (현재)
kwon37xi
줄 1: 줄 1:
 ====== Java 8 CompletableFuture ====== ====== Java 8 CompletableFuture ======
-[[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html|CompletableFuture (Java Platform SE 8 )]]+  * [[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html|CompletableFuture (Java Platform SE 8 )]] 
 +  * [[https://github.com/spotify/completable-futures|spotify/completable-futures: Utilities for working with futures in Java 8]] 
 + 
 +===== Thread Pool (Executor) ===== 
 +  * ''supplyAsync'' 등의 메소드 호출시 쓰레드 풀을 명시하지 않으면 [[java:concurrent:forkjoinpool|Java ForkJoinPool]]의 ''commonPool()'' 이 사용된다. 
 +  * 개발자가 쓰레드 풀을 제어할 수 없다는 것은 나중에 문제가 될 수 있다. 
 +  * 따라서, 항상 [[java:concurrent:executorservice|Java ExecutorService]] 를 명시적으로 사용하여 쓰레드 풀을 지정하도록 한다. 
  
 ===== ParallelStream vs. CompletableFuture ===== ===== ParallelStream vs. CompletableFuture =====
줄 6: 줄 13:
   * **ParallelStream** : **I/O가 포함되지 않은 계산 중심**의 동작을 실행할 때는 스트림 인터페이스가 가장 구현하기 간다하며 효율적일 수 있다(모든 스레드가 계산 작업을 수행하는 상황에서는 프로세서 코어 수 이상의 쓰레드를 가질 필요가 없다).   * **ParallelStream** : **I/O가 포함되지 않은 계산 중심**의 동작을 실행할 때는 스트림 인터페이스가 가장 구현하기 간다하며 효율적일 수 있다(모든 스레드가 계산 작업을 수행하는 상황에서는 프로세서 코어 수 이상의 쓰레드를 가질 필요가 없다).
   * **CompletableFuture** : 반면 작업이 **I/O를 기다리는 작업을 병렬로 실행**할 때는 ''CompletableFuture''가 더 많은 유연성을 제공하며 대기/계산(W/C)의 비율에 적합한 스레드 수를 설정할 수 있다. 특히 스트림의 게으른 특성 때문에 스트림에서 I/O를 실제로 언제 처리할 지 예측하기 어려운 문제도 있다.   * **CompletableFuture** : 반면 작업이 **I/O를 기다리는 작업을 병렬로 실행**할 때는 ''CompletableFuture''가 더 많은 유연성을 제공하며 대기/계산(W/C)의 비율에 적합한 스레드 수를 설정할 수 있다. 특히 스트림의 게으른 특성 때문에 스트림에서 I/O를 실제로 언제 처리할 지 예측하기 어려운 문제도 있다.
 +  * [[http://fahdshariff.blogspot.kr/2016/06/java-8-completablefuture-vs-parallel.html|fahd.blog: Java 8: CompletableFuture vs Parallel Stream]]
  
 +===== 여러 CompletableFuture를 하나로 합쳐주기 =====
 +  * [[https://github.com/kwon37xi/research-java-9-10-11/blob/main/src/main/java/kr/pe/kwonnam/research/java/completablefuture/CompletableFutureCollector.java|CompletableFutureCollector.java]]
  
 +===== 참조 ===== 
 +  * [[https://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html|Java 8: Definitive guide to CompletableFuture]] Good! 
 +  * [[https://www.nurkiewicz.com/2013/05/java-8-completablefuture-in-action.html|Java 8: CompletableFuture in action]] Good! 
 +  * [[https://www.nurkiewicz.com/2015/11/which-thread-executes.html|Which thread executes CompletableFuture's tasks and callbacks?]] Good! 
 +  * [[https://www.baeldung.com/java-completablefuture|Guide To CompletableFuture | Baeldung]] 
 +  * [[https://www.youtube.com/watch?v=HdnHmbFg_hw|(94) Asynchronous programming in Java 8: how to use CompletableFuture by José Paumard - YouTube]] 
 +  * [[https://dzone.com/articles/using-java-8-completablefuture-and-rx-java-observa|Using Java 8 CompletableFuture and Rx-Java Observable - DZone Java]] 
 +  * [[https://examples.javacodegeeks.com/core-java/java-completablefuture/|Java CompletableFuture Example]] 
 +  * [[https://12bme.tistory.com/545?category=682904|[JAVA] 개선된 동시성(1) - CompletableFuture & Reactive Concept]] 
 +  * [[https://12bme.tistory.com/546|[JAVA] 개선된 동시성(2) - CompletableFuture 프로그래밍]]
java/8/completable_future.1468652118.txt.gz · 마지막으로 수정됨: 2016/07/16 15:25 저자 kwon37xi