2016-05-25 2 views
0
public static void main(String[] args) { 
    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7); 
    Observable.from(list) 
      .map(new Func1<Integer, String>() { 
       @Override 
       public String call(Integer integer) { 
        return String.format("%d ",integer); 
       } 
      }).subscribeOn(Schedulers.newThread()) 
      .observeOn(Schedulers.newThread()) 
      .subscribe(new Action1<String>() { 
       @Override 
       public void call(String s) { 
        System.out.print(s); 
       } 
      }); 
} 

これはrxjavaを使用するときのテストです。それは何も印刷しません。私は理由を知らない。だれでも私に助けを与えることができる?ありがとう。についてSchedulers.newThread()

+1

あなたのメインメソッドは、オブザーバーコードが実行される前に戻ります。これを修正するには、.subscribe(Action1)の前に.toBlocking()を追加することができます。 –

+0

私の問題の理由がたくさんありがとう(メインメソッドが終了しました) – duwei

答えて

3

RxJava標準スケジューラはデーモンスレッドです。 main()メソッドが終了すると、JVMは終了し、それらのデーモン・スレッドは停止します。

Thread.sleep(5000)main()メソッドの最後に配置すると、出力が表示されます。または.subscribe()コールの前に.toBlocking()を適用してください。