2017-10-12 90 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