0

我遇到了与错误递归和 StackOverflowError 相关的编程问题。我在一个单独的线程中有这个案例:

public void subscribe(final String channel) {
   try {
      // blocking command
      client.subscribe(channel);
   } catch(ConnectionException e) {
      subscribe(channel);
   }
}

假设这个 ConnectionException 只是周期性地发生(就像每分钟一样)。几百次之后,我显然得到了一个 StackOverflowError。

我知道发生了什么,但我不知道如何解决这个问题(即在不增加调用堆栈的情况下静默重新订阅)。有任何想法吗?

4

2 回答 2

1

现在你有一个无限递归。设置递归中断条件。您需要有一个递归应该停止的条件。放置一个 if 块并在某个点逻辑地停止递归。

于 2013-06-01T08:08:36.533 回答
1

为什么不使用像他这样的简单循环?

public void subscribe(final String channel) {
   while(true){
       try {
          // blocking command
          client.subscribe(channel);
          return;
       } catch(ConnectionException e) {
          // ignored
       }
   }
}
于 2013-06-01T08:15:42.557 回答