我正在试验来自jdk 9-ea+171的jdk 9-ea+171客户端。代码摘自这个例子
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()中无限等待。
发布于 2017-05-31 20:55:21
这是最新构建的HTTP2连接实现中的一个bug。它不适用于以前的构建。
首先,您需要指定GET方法以避免获得空指针异常。
所发生的情况是,主线程正在等待发送连接序言。它锁定一个计数下锁,等待本序言的接收。为了唤醒自己,任何HttpClient都会创建一个读取传入通信量的帮助线程。这个线程应该唤醒主线程,但有时,这种情况永远不会发生。如果你经常运行你的例子,你会发现这有时是有效的。我想是有人竞相读序言吧。
不幸的是,阅读序言也不尊重任何超时,因此除了中断主线程之外,没有办法唤醒主线程。
https://stackoverflow.com/questions/44266022
复制相似问题