시그마 삽질==six 시그마

CompletableFuture 본문

프로그래밍/Java

CompletableFuture

Ethan Matthew Hunt 2020. 10. 31. 01:41

 

/*
supplyAsync() 반환값 있는 비동기 작업, runAsync() : 반환값 없는 비동기 작업

get(): 블로킹 get
join(): 블로킹 get+ 예외발생시 throw exception 

thenApply() 리턴  있는 동기 콜백, thenApplyAsync() 리턴  있는 비동기 콜백
thenAccept() 리턴  없는 동기 콜백, thenAcceptAsync()리턴  없는 비동기 콜백

thenCompose() : 여러개의 작업들을 순차 실행 
thenCombine() :  여러개의 작업들을 병렬 실행

anyOf() :작업들중 가장 빠른거 1개 결과 가져옴
allOf(): 작업들(3개이상도 가능)  병렬실행하고 결과 조합
*/


ExecutorService executor = Executors.newFixedThreadPool(4);

		CompletableFuture<Integer> future1 = CompletableFuture
				.supplyAsync(() -> {
					try {
						Thread.sleep(5000L);
						log.info("supplyAsync1:{}",Thread.currentThread().getName());
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					return 1;
				});


		CompletableFuture<Integer> future2 = CompletableFuture
				.supplyAsync(() -> {
					log.info("SupplyAsync2:{}",Thread.currentThread().getName());
					return 2;
				},executor)
				.thenApplyAsync(number -> {
					log.info("thenApplyAsync2:{}",Thread.currentThread().getName());
					return number + 3;
				},executor);

		//CompletableFuture.allOf(future1, future2);
		Integer number = future1.thenCombine(future2, (a, b) -> a + b).join();
		System.out.println("number = " + number);

 

 

 

Comments