【发布时间】:2013-06-01 16:20:17
【问题描述】:
我遇到了与错误递归和 StackOverflowError 相关的编程问题。 我在一个单独的线程中有这个案例:
public void subscribe(final String channel) {
try {
// blocking command
client.subscribe(channel);
} catch(ConnectionException e) {
subscribe(channel);
}
}
假设这个 ConnectionException 只是周期性地发生(就像每分钟一样)。几百次后,我显然得到了一个 StackOverflowError。
我知道发生了什么,但我不知道如何解决这个问题(即在不增加调用堆栈的情况下静默重新订阅)。有什么想法吗?
【问题讨论】:
-
什么是拦截命令?
-
使用递归来检测事件太过分了..你为什么不实现和使用回调..
-
阻塞命令基本上是一个监听远程数据的命令。数据被并行异步推送到监听器。
-
如果你不想实现重试机制,那么你应该在重试实际发生之前先休眠。所以在 Try 块中睡一会儿吧。
-
@AmitD 睡眠不会延迟问题吗?
标签: java recursion stack-overflow