我有一个跟随
多次调用的函数report="http://myURL/some_file.php" + "?someParam=" + getSomeParam()";
其中myURL
始终相同,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
}
}
问题是,如果是处理这种情况的有效方法,每次开放
新连接有不同的参数?此外,报告对主程序没有影响,
它应该在不同的线程/进程中完成吗?
答案 0 :(得分:1)
打开一个新连接有一些开销,但听起来不像你的程序大量使用套接字,所以开销应该可以忽略不计。你不需要两个试块,顺便说一句,你可以只有一个,然后将一个接一个地放在一起。
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)构造中。不遵循这种做法是在更复杂的套接字编程中引入连接泄漏的好方法。