私はRxJavaを学び、それは非常に便利だと思っていますが、自分でコードをテストし始めたら、正しく動作しません。RxJavaのシンプルなデモが動作しない
私はこのようなコードを書いていますが、何も印刷しません。プログラムは開始直後に停止します。
public static void main(String[] args) {
Observable.just(1, 2, 3, 4)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer number) {
System.out.println(number);
}
});
}
また、私はそれがメインスレッドでのみ動作することがわかります。 このコードは、私がrxjava 1.3.0を使用していると私は、このコードを書い数
public static void main(String[] args) {
Observable.just(1, 2, 3, 4)
.subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.immediate())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer number) {
System.out.println(number);
}
});
}
を印刷します記事からの指示に従ってください。
私に何か不足しましたか?
(私は今それを理解rxjavaはすぐに新しいスレッドを作成しませんように、それが見えていますので、rxjavaは、新しいスレッドを作成することができます前に、メインスレッドが終了され、JVMがシャットダウンされます。
以前のようにするには例の仕事は、ただ生きて長いメインスレッドを作る。
Observable.just(1, 2, 3, 4)
.subscribeOn(Schedulers.newThread()) //
.observeOn(Schedulers.newThread()) //
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer number) {
System.out.println(number);
}
});
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
)
それは私のためによく見えます。あなたは 'subscribeOn'と' observeOn'なしでそれを試すことができますか? –
これはsubscribeOnとobserveOnなしで動作しますが、それは2番目のものと同じでした。どうすれば別のスレッドで実行できますか? – BlackCat
observableはブロックされません(subscribeOnで実行されます)。したがって、メインメソッドは終了し、JVMはシャットダウンします。最後にブロック操作を使用する必要があります。ブロッキングのgetまたはblocking subscribeメソッドを使用します。参照:https://stackoverflow.com/questions/46991778/connectableobservable-not-emitting-values –