有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java超时异常

这是我下面的代码,我不明白为什么会发生这种事情。在这段代码中,getLocationTimeout是一个方法,我在其中传递两个东西——一个是ip地址,另一个是以毫秒为单位的超时。因此,如果在这种特殊情况下,响应没有在5毫秒内返回,我将得到超时异常。所以,当我运行下面的代码时,我得到的ip地址很少超时异常。这意味着一些响应需要更长的时间(大于5毫秒),但最重要的是,我感到困惑的是,如果我遇到超时异常(获取响应所需的时间大于5毫秒),那么为什么程序会进入我有差异的if循环>;5.它应该在前一个位置引发超时异常。可能的原因是什么?是因为拦网吗?如有任何建议,将不胜感激

long runs = 10000;
long difference = 0;

while (runs > 0) {
    String ipAddress = generateIPAddress();
    long start_time = System.nanoTime();

    try {
        resp = GeoLocationService.getLocationTimeout(ipAddress, 5);
    } catch (TimeoutException e) {
        System.out.println("Timeout Exception");
    }

    long end_time = System.nanoTime();

    if (resp == null || (resp.getLocation() == null)) {
        difference  = 0;
    } else if (resp.getLocation() != null) {
        difference = (end_time - start_time) / 1000000;
    }

    if (difference> 5) {
        System.out.println("Debug");
    }

}

预计不到输出 好啊我遇到的问题是,对于任何大于5毫秒的响应,它都应该打印出超时异常。但在某些情况下,它正在打印调试,但没有打印超时异常,在调试器的帮助下,我发现如果差异在6或8左右,那么我看到指针进入调试的if循环


共 (1) 个答案

  1. # 1 楼答案

    好的,谢谢你添加信息——我想我会把这个作为一个不同的答案,因为它是一个不同的策略。因此,从你添加的信息来看,我认为额外的时间似乎只是因为额外的try-catch等指令的运行(我认为)。然而,也许你真的应该重新编写代码。getLocationByIpTimeout调用完成了所有需要的计时,我想,这样你就可以在catch块中执行任何需要的逻辑,也就是说,你不需要所有的计时功能——这能满足你的需要吗