2017-10-12 48 views
0

我新用Java線程,並想知道我怎麼能牢記以下可觀測運行,保持區間可觀察運行中的Java

private void init() { 
    System.out.println("Running..."); 

    Observable o = Observable.interval(5, TimeUnit.SECONDS) 
      .flatMap(o -> serverService.listServers("all")) 
      .retryWhen(o -> o.flatMap(s -> Observable.timer(30, TimeUnit.SECONDS))) 
      .subscribe(serverModels -> System.out.println("onNext"), 
        e -> System.out.println("ERROR " + e), 
        () -> System.out.println("Completed")); 
} 

如果我把從主()時,立即退出該方法。我如何避免流程退出?

+0

observable不會立即退出,但是如果您的main立即退出,那麼當JVM停止時,此可觀察值將停止。 –

+0

@BobDalgleish有道理。有沒有一種優雅的方式來防止這種情況發生?我希望觀察者能夠運行無限的時間。 – SpecialSnowflake

回答

1

睡覺會導致錯誤。而是檢出blockingSubscribe操作符。

0

您的進程終止,因爲主要方法到達其主體結束。如果你只需要這個試驗只是把一個無限循環或睡眠指令的主要方法

public static main() { 
    init(); 
    Thread.sleep(6000L) 
} 
當然

結束在真實的場景中,你可以開始一個新的線程,鄰依賴於extrenal框架,但無論如何,你必須確保jvm不會退出;)

+0

有沒有更好的方法來實現這一目標?如你說的那樣;在一個新的線程中(總是運行的線程)。 – SpecialSnowflake

+0

「更好」取決於您的要求,您只需確保jvm不會退出。你也可以使用Thread.sleep(9000L) – gtosto