RxJava로 텍스트 줄을 동시에 처리 할 수있는 방법이 궁금합니다. 지금 내가 가진 것은 항목 집합에서 관찰 가능한 항목과 각 항목에서 onNext 호출의 항목을 처리하는 구독자입니다. 구독자는이 코드 줄로 Observable을 구독합니다.
obs.observeOn(Schedulers.io()).subscribe(sub);
하지만 실행하면 순차 버전만큼 느리게 실행되며 순차적으로 처리하는 것 같습니다. 이것을 어떻게 동시에 만들 수 있습니까?
귀하의 observeOn(Schedulers.io())
호출은 모든 방출이 해당 스레드에서 관찰된다는 것을 의미합니다. 당신은 그것들을 그들 자신의 스레드 로 가져오고 싶습니다 .
여기 flatMap
에서는 소스에서 방출 된 각 항목에 대해 새로운 Observable을 생성하는 데 사용 합니다. 매핑 기능 내에서 defer
구독까지 처리 작업을 해야합니다 . 그렇지 않으면 처리가 완료되는 동안 전체 체인이 차단됩니다. 또한을 통해 새 스레드에서 구독이 발생하는지 확인해야합니다 subscribeOn
.
Random r = new Random();
Observable.from(new String[]{"First", "Second", "Third", "Fourth", "Fifth"})
.flatMap(new Func1<String, Observable<String>>() {
public Observable<String> call(final String s) {
return Observable.defer(new Func0<Observable<String>>() {
public Observable<String> call() {
Thread.sleep(r.nextInt(1000));
return Observable.just(s);
}
}).subscribeOn(Schedulers.newThread());
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println("Observed " + s + " on thread " + Thread.currentThread().getId());
}
});
이것은 나에게 다음과 같은 출력을 제공합니다 (순서가 다르고 다른 스레드에서-즉, 병렬로 처리됨).
Observed Fourth on thread 17
Observed Second on thread 15
Observed Fifth on thread 18
Observed First on thread 14
Observed Third on thread 16
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다