线程中的Java请求

我很酷

我陷入了这个问题,我使用线程和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;
}
斯蒂芬·C

您的Question中没有上下文可以确保这是问题所在,但是您的代码存在一个问题,即您没有在返回值之前等待线程完成a因此,您可能在线程存储任何内容a 之前返回的内容

实际上,这段代码有些错误。如果要request(String)返回从服务器检索到的值,request则在检索到数据之后calll才能完成。这不可避免地是同步的。使用aThread进行检索实际上没有任何效果。

join()按照建议使用“修复”症状,但在这里使用线程并不是没有意义的。)

如果您希望它是异步的,则可以更改request为返回a Future<String>,以便调用方可以在以后使用它来获取所获取的值。

如果您使用Executor而不是为每个“请求”创建一次使用的线程,则将更简单(可能)更高效

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章