Future 인터페이스 역시 자바 5에서 추가된 동시성 API로 비동기 계산의 결과를 구할 때 사용한다.
보통 Executor 인터페이스를 구현한 클래스에 Callable 객체를 인자로 넣어 Future 객체를 반환한다.
그리고 get() 메소드를 호출하면 Callable 객체에서 구현한 계산 결과가 나올때가지 기다리게 된다.(블로킹)
먼저 Future 객체에서 fromFuture() 함수를 사용해 Observable를 생성하는 방법이다.
private void basic(){
Future<String> future = Executors.newSingleThreadExecutor().submit(() -> {
Thread.sleep(1000);
return "Hello Future";
});
Observable<String> source = Observable.fromFuture(future);
source.subscribe(System.out::println);
}
결과값
Hello Future
Executors 클래스의 newSingleThreadExecutor() 메서드에 람다 표현식의 Callable 객체를 인자로 넣었다.
Callable 인터페이스의 call() 메서드는 인자가 없으므로 람다표현식으로 () -> {} 나타냈으며,
1초를 쉬고 "Hello Future"를 반환하게 된다.
이렇게 만들어진 future 객체를 fromFuture() 함수의 인자로 넣으면 된다.
** 참고로 Executors 클래스는 단일 스레드 실행자(singleThreadExecutor)뿐만 아니라
다양한 스레드풀(FixedThreadPool, CachedThreadPool)을 지원한다.
하지만, RxJava는 위와 같은 실행자를 활용하기 보다는 RxJava에서 제공하는 스케줄러를 활용하도록 권장한다.
자세한 내용은 추후에 다루겠다.
'프로그래밍 > RxJava' 카테고리의 다른 글
[RxJava] Single 클래스 (0) | 2020.02.16 |
---|---|
[RxJava] Observable - fromPublisher() 함수 (0) | 2020.02.16 |
[RxJava] Observable - fromCallable() 함수 (0) | 2020.02.16 |
[RxJava] Observable - fromIterable()함수 (0) | 2020.02.16 |
[RxJava] Observable - fromArray() 함수 (0) | 2020.02.16 |