CompletableFuture 1

완료 시 호출할 수 있는 콜백 함수 및 작업을 지원하는 Future다.

메소드

completedFuture(U value)
완료된 CompletableFuture를 생성한다. get() 호출시 value를 반환한다.

예제

	CompletableFuture<String> stringCompletableFuture = CompletableFuture.completedFuture("Hello");
	System.out.println(stringCompletableFuture.get());

complete(T value)
작업이 완료 상태가 아니면 완료상태로 바꾸고, get() 호출시 value를 반환한다. 완료 상태면 아무일도 일어나지 않는다.

예제

	CompletableFuture<String> stringCompletableFuture = CompletableFuture.completedFuture("Hello")
	stringCompletableFuture.complete("hello");
	System.out.println(stringCompletableFuture.get());

runAsync(Runnable runnable)
작업의 리턴값이 없을 경우에 사용한다

예제

	CompletableFuture<Void> runAsync = CompletableFuture.runAsync(getRunnable("runAsync"));
	runAsync.get();

supplyAsync(Supplier supplier)
작업의 리턴값이 있을 경우 사용한다.

예제

	CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "supplyAsync" 
		+ Thread.currentThread().getName());
	System.out.println(supplyAsync.get());

thenApply(Function fn)
리턴값이 있는 콜백함수

예제

	CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "supplyAsync" 
		+ Thread.currentThread().getName());
	String supplyAsyncUpper = supplyAsync.thenApply(String::toUpperCase).get();
	System.out.println(supplyAsyncUpper);
	

thenAccept(Consumer action)
리턴값이 없는 콜백함수

예제

	CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "supplyAsync" 
		+ Thread.currentThread().getName());
	supplyAsync.thenAccept(r -> System.out.println(r.toUpperCase())).get();

thenRun(Runable action)
결과 상관없는 콜백함수

예제

	CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "supplyAsync" 
		+ Thread.currentThread().getName());
	supplyAsync.thenRun(()->{
		System.out.println("isDone! "+Thread.currentThread().getName());
	}).get();

then*Async(task, Excutor excutor)
작업을 실행할 excutor를 설정할 수 있다.

예제

	CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "supplyAsync" 
		+ Thread.currentThread().getName());
	ExecutorService executorService = Executors.newFixedThreadPool(4);
	supplyAsync.thenRunAsync(()-> System.out.println(Thread.currentThread().getName()), executorService);
	executorService.shutdown();

예제는 이곳 에서 확인할 수 있다.