0

我有一个多次调用的以下函数

report="http://myURL/some_file.php" + "?someParam=" + getSomeParam()";

wheremyURL总是相同的,some_file.php并且someParam每次都不同。

private static void makeReport(final String report) {
    try {
        URL url = new URL(report);
        try {
            url.openStream();
        } catch (IOException e) {
            return; // do nothing
        }
    } catch (MalformedURLException e) {
        return; // do nothing
    }
}

问题是,如果它是一种有效的方法来处理这种情况,每次打开不同参数的新连接?另外,报告对主程序没有影响,所以应该在不同的线程/进程中完成吗?

4

1 回答 1

1

打开一个新连接有一些开销,但听起来你的程序并没有大量使用套接字,所以开销应该可以忽略不计。您不需要两个 try 块,顺便说一下,您可以只拥有一个,然后将 catch 块一个接一个地放置。

private static void makeReport(final String report) {
    InputStream in = null;
    try {
        URL url = new URL(report);
        in = url.openStream();
    } catch (MalformedURLException e) {
        return; // do nothing
    } catch (IOException e) {
        return; // do nothing
    } finally {
        try { in.close(); } catch (IOException ex) { ex.printStackTrace(); }
    }
}

至于这个方法是否应该进入自己的线程,取决于上下文。它需要异步吗?对于它的价值,发出一个简单的 GET 请求应该不会花费太长时间。我无法想象你需要它在自己的线程中的情况。

最后一点,每当您打开一个连接时,关闭它总是一个好习惯,尤其是在 try-catch-finally(或 try-with-resources)结构中。不遵循这种做法是在更复杂的套接字编程中引入连接泄漏的好方法。

于 2012-12-30T17:00:40.340 回答