Java 9 HttpClient挂起

awf*_*fun 8 java http2 java-9

我正在试验HTTP/2客户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());
Run Code Online (Sandbox Code Playgroud)

但客户端永远挂在最后一行.请指教如何解决?

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

Raf*_*ter 4

这是最新版本的 HTTP2 连接实现中的一个错误。以前的版本不会出现这种情况。

首先,您需要指定GET避免出现空指针异常的方法。

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

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

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