Java 9 HttpClient 挂起

Java 9 HttpClient hangs

我正在试验来自 jdk 9-ea+171HTTP/2 客户端。代码取自this example:

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() 中无限等待。

这是最新版本的 HTTP2 连接实现中的错误。它不会出现在以前的版本中。

首先需要指定GET方法,避免得到空指针异常

发生的情况是主线程正在等待发送连接序言。它锁定一个倒计时锁存器以等待接收此序言。为了唤醒自己,any HttpClient 创建了一个辅助线程来读取传入的流量。这个线程应该唤醒主线程,但有时,这永远不会发生。如果你 运行 你的例子,你会发现这有时会奏效。我猜是有一场阅读序言的竞赛。

不幸的是,前言的读取也不考虑任何超时,所以除了中断主线程外,没有办法唤醒主线程。

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