我陷入了这个问题,我使用线程和http请求来获取数据,但是我的方法总是返回空字符串或最后一个请求的响应。这是我的代码:
static String a = "";
public static String request(String request) {
new Thread(() -> {
try {
HttpURLConnection conn = (HttpURLConnection) new URL(request).openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line, text = "";
while((line = br.readLine()) != null) {
text = line;
}
br.close();
a = text;
} catch (IOException e) {
e.printStackTrace();
}
}).start();
return a;
}
您的Question中没有上下文可以确保这是问题所在,但是您的代码存在一个问题,即您没有在返回值之前等待线程完成a
。因此,您可能在线程存储任何内容a
之前返回的内容。
实际上,这段代码有些错误。如果要request(String)
返回从服务器检索到的值,request
则在检索到数据之后,calll才能完成。这不可避免地是同步的。使用aThread
进行检索实际上没有任何效果。
(join()
按照建议使用“修复”症状,但在这里使用线程并不是没有意义的。)
如果您希望它是异步的,则可以更改request
为返回a Future<String>
,以便调用方可以在以后使用它来获取所获取的值。
如果您使用Executor
而不是为每个“请求”创建一次使用的线程,则将更简单(可能)更高效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句