ListenableFuture
Google이 개발한 guava 오픈소스 라이브러리에 포함되어 있다.
Executor에 task를 제출하고, 돌려 받는 Future 타입의 종류 중 하나이다.
(기존의 Executor 대신 ListeningExecutorService를 사용한다.)
Callback method를 생성해서 task가 성공했을 때, 실패했을 때의 작업을 미리 지정해놓을 수 있다.
이렇게 Callback method를 생성하는 것은 Futures를 사용하는 것과 ListenableFuture의 addListener 두 가지가 있다.
ListeningExecutor와 task 생성
ListeningExecutorService executor =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2));
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
return "TASK";
}
};
ListenableFuture<String> listenableFuture = executor.submit(task);
Futures를 통한 Callback 등록
Futures.addCallback(listenableFuture, new FutureCallback<String>() {
@Override
public void onSuccess(String result) {
System.out.println("SUCCESS");
}
@Override
public void onFailure(Throwable thrown) {
System.out.println("FAILURE : " + thrown.getMessage());
}
});
ListenableFuture.addListener()
listenableFuture.addListener(new Runnable() {
@Override
public void run() {
try {
System.out.println(listenableFuture.get());
} catch (Exception e) {
System.out.prinrln("EXCEPTION : " + e.getMessage());
}
}
}, executor);
참고
CompletableFuture
비동기 task간의 연결과 그 사이에 발생하는 예외처리 등의 해결을 위해 등장.
ExecutorService executor = Executors.newSingleThreadExecutor();
CompletableFuture.runAsync(()->{
try {
Thread.sleep(1000);
} catch (Exception e) {
System.out.println("EXCEPTION");
}
System.out.println("I'm awake!");
}, executor)
.thenTun(()->System.out.println("Next Job"));
System.out.println("Hello world!");
'개발 > Java, Spring' 카테고리의 다른 글
비동기 처리 - ExecutorService (0) | 2019.03.19 |
---|