반응형
Fruture - Blocking 방식의 작업 완료 통보
Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용된다. 이를 지연완료 (pending completion) 객체라고 한다.
ExecutorService service = Executors.newSingleThreadExecutor();
Runnable task = new Runnable() {
@Override
public void run() {
// blah
}
};
Future future = service.submit(task);
try {
future.get();
} catch (Exception e) {
// handling
}
future.get()
작업이 정상적으로 완료되면 Future의 get()메소드는 리턴한다. 물론 리턴 값을 가질 때까지 get() 메소드를 호출한 Thread는 기다린다.
ExcutorService 관련내용
더보기
ExcutorService를 이용해서 간단한 쓰레드풀을 사용하여 병렬 처리를 할 수 있다.
본문에서 사용한 newSingleThreadExcutor()은 쓰레드 1개은 ExcutorService를 리턴하는것으로 싱글 쓰레드에서 동작해야하는 작업을 처리할 때 사용한다.
그 외로 newFixedThreadPool(int), newCachedThreadPool(), newScheduledThreadPool() 이 있다.
Callable
결과값이 있는 경우에 사용하는 객체이다.
ExecutorService service = Executors.newSingleThreadExecutor();
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
return "월요병";
}
};
Future<String> future = service.submit(task);
try {
String futureResult = future.get();
System.out.println("futureResult: "+futureResult);
} catch (Exception e) {
// Exception e
}
Callable<T>와 Future<T> T를 동일한 타입으로 설정해야한다.
참고 사이트
반응형
'JAVA' 카테고리의 다른 글
[리팩토링] 분류코드를 클래스로 치환 (0) | 2021.03.21 |
---|---|
일급컬렉션 (0) | 2020.07.06 |
Java의 배열 (0) | 2020.05.18 |
Enum에 대해서 (0) | 2020.05.17 |
Reference 와 Garbage Collection (0) | 2020.03.13 |