首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 9 HttpClient挂起

Java 9 HttpClient挂起
EN

Stack Overflow用户
提问于 2017-05-30 15:16:11
回答 1查看 1.3K关注 0票数 8

我正在试验来自jdk 9-ea+171jdk 9-ea+171客户端。代码摘自这个例子

代码语言:javascript
复制
HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(new URI("https://www.google.com/"))
    .build();

HttpResponse<String> response
        = client.send(request, HttpResponse.BodyHandler.asString());

但客户永远挂在最后一条线上。请指教如何修理它?

调试显示它在方法waitUntilPrefaceSent()中无限等待。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 20:55:21

这是最新构建的HTTP2连接实现中的一个bug。它不适用于以前的构建。

首先,您需要指定GET方法以避免获得空指针异常。

所发生的情况是,主线程正在等待发送连接序言。它锁定一个计数下锁,等待本序言的接收。为了唤醒自己,任何HttpClient都会创建一个读取传入通信量的帮助线程。这个线程应该唤醒主线程,但有时,这种情况永远不会发生。如果你经常运行你的例子,你会发现这有时是有效的。我想是有人竞相读序言吧。

不幸的是,阅读序言也不尊重任何超时,因此除了中断主线程之外,没有办法唤醒主线程。

这是一张官方票:https://bugs.openjdk.java.net/browse/JDK-8181430

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44266022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档