2016-08-07 24 views
0

* Der folgende Code hat nichts drucken, mich verwirrt * wenn ich subscribeon entfernen, es funktioniert, drucken, was ich will, wenn ich eine andere schduler subscribeon, gratis anmelden nicht mehr funktioniert

Observable observable = Observable.<String>create(subscriber -> { 
       try { 
        subscriber.onNext("1"); 
        System.out.println(" current thread is " + Thread.currentThread().getName()); 
        Thread.sleep(100); 
        subscriber.onNext("2"); 
        Thread.sleep(300); 
        subscriber.onNext("3"); 
        Thread.sleep(1000); 
        subscriber.onNext("4"); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
    ); 

    observable.subscribeOn(Schedulers.io()).timeInterval().observeOn(Schedulers.immediate()).subscribe(n -> System.out.println(((TimeInterval) n).getIntervalInMilliseconds() 
        + " value is " + ((TimeInterval) n).getValue()), 
      e -> System.out.println("onerror " + e), 
      () -> System.out.println("oncomplete ")); 
+0

akarnokd ist ganz richtig, ich danke Ihnen sehr. @ Akarnokd, ich möchte eine andere Frage stellen: Was ist der Unterschied zwischen Scheduler und Thread –

Antwort

1

Ihr Haupt-Thread wird beendet, bevor die subscribeOn wirksam wird, versuchen Sie, auch im Haupt-Thread zu schlafen, oder verwenden Sie toBlocking().subscribe(...). Beachten Sie auch, dass Schedulers.immediate() Aufgaben auf dem gleichen Thread ausführt, auf dem der Wert empfangen wird, und nicht auf dem Thread, der die Sequenz zusammengestellt hat.

+0

akarnokd ist ganz richtig, vielen Dank. @ Akarnokd, ich möchte eine fragen Eine andere Frage: Was ist der Unterschied zwischen Scheduler und Thread? –

+0

Scheduler ist eine Abstraktion, die oft von einem Threadpool unterstützt wird, der auf Threads läuft. Sie könnten auch einen Scheduler haben, der von Schauspielern oder Fasern unterstützt wird, aber mit ihnen auf die gleiche Weise arbeiten. – akarnokd