当前位置: 首页 > 面试题库 >

Java 如何实施重试捕获?

姜华翰
2023-03-14
问题内容

Try-catch旨在帮助处理异常。这意味着它将以某种方式帮助我们的系统更强大:尝试从意外事件中恢复。

我们怀疑在执行和指令(发送消息)时可能会发生某些事情,因此将其包含在try中。如果发生了几乎不可预料的事情,我们可以采取一些措施:编写渔获物。我不认为我们打电话来只是记录异常。我认为catch块旨在为我们提供从错误中恢复的机会。

现在,假设我们从错误中恢复了,因为我们可以修复错误所在。重试可能是超级好:

try{ some_instruction(); }
catch (NearlyUnexpectedException e){
   fix_the_problem();
   retry;
}

这将很快陷入永恒的循环,但是假设fix_the_problem返回true,然后我们重试。鉴于Java中没有这样的东西,你将如何解决此问题?解决该问题的最佳设计代码是什么?

鉴于我已经知道我所要的东西并没有被Java直接支持,所以这就像一个哲学问题。


问题答案:

你需要将你try-catchwhile循环包含在这样的循环中:-

int count = 0;
int maxTries = 3;
while(true) {
    try {
        // Some Code
        // break out of loop, or return, on success
    } catch (SomeException e) {
        // handle exception
        if (++count == maxTries) throw e;
    }
}

我已采取countmaxTries避免陷入无限循环,以防你的中不断发生异常try block



 类似资料:
  • Try-catch旨在帮助处理异常。这意味着它将帮助我们的系统更加健壮:尝试从一个意外事件中恢复。 我们怀疑在执行and指令(发送消息)时可能会发生一些事情,因此它被封闭在try中。如果发生了几乎意想不到的事情,我们可以做一些事情:我们编写catch。我不认为我们打电话只是为了记录异常。我认为catch块是为了给我们从错误中恢复的机会。 现在,假设我们可以从错误中恢复,因为我们可以修复错误。再试一

  • 在Perl中,使用Moo,可以围绕sub实现sub,它将围绕类中的其他方法。 如何在Raku中实现这种行为,最好使用角色?

  • 我正在尝试实现身份验证 可以请求任何微服务的API网关。 用户微服务-我存储所有用户的地方。实现在此微服务中对用户进行身份验证。按应有的方式工作,登录路由返回我用于在此微服务中对用户进行身份验证的令牌。 其他5个微服务,未经任何身份验证或授权。 问题是:使用身份验证的正确方法是什么

  • 问题内容: 如何在catch块中实现代码? 问题答案: 不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办? 但是,这是循环执行的方法: 更新: 令人失望的先生在下面的评论中提到:该方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过 再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启

  • 问题内容: 在简要回顾了Go语言规范,有效的Go和Go内存模型之后,我仍然不清楚Go通道是如何工作的。 它们是什么样的结构?它们的行为有点像线程安全队列/数组。 它们的实现取决于体系结构吗? 问题答案: 通道的源文件位于/src/pkg/runtime/chan.go中(从您的源代码根目录开始)。 是通道的中央数据结构,带有发送和接收链接列表(持有指向其goroutine和data元素的指针)和一

  • 鉴于: 我想尝试,并重试,连接到服务器3次才放弃。 我可以把整个try/catch放在一个循环中,但是这是否符合Java的“最佳实践”。从我对该主题的回忆来看,这将是对语句的误用。再说一次,我可能完全错了。你怎么认为?