我正在试验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().
这是最新版本的 HTTP2 连接实现中的一个错误。以前的版本不会出现这种情况。
首先,您需要指定GET避免出现空指针异常的方法。
发生的情况是主线程正在等待发送连接前言。它锁定一个倒计时锁存器以等待收到此前言。为了唤醒自身,anyHttpClient创建一个辅助线程来读取传入流量。该线程应该唤醒主线程,但有时,这种情况永远不会发生。如果您经常运行您的示例,您会发现这有时有效。我想这是一场阅读序言的竞赛。
不幸的是,前言的阅读也不尊重任何超时,因此除了中断主线程之外,没有办法唤醒主线程。
这是官方票证:https://bugs.openjdk.java.net/browse/JDK-8181430
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |