1、新增 HttpClient 客户端
简介
这个功能在 JDK9 中引入并在 JDK10 中得到了更新,最终在 JDK11 中发布,支持 HTTP1.1
和 HTTP/2。
常用工具类和接口:
- HttpClient.Builder HttpClient 构建 ⼯具类
- HttpRequest.Builder HttpRequest 构建 ⼯具类
- HttpRequest.BodyPublisher 将 Java 对象转换为可发送的 HTTP request body 字节流, 如 form 表单提交
- HttpResponse.BodyHandler 处理接收到的 Response Body
Get 请求
package jdk11; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; /** * @author by xw * @Description TODO */ public class HttpClientTest { private static final URI uri = URI.create("http://www.baidu.com"); public static void main(String[] args) { testGet(); } //GET请求 private static void testGet() { //var httpClient = HttpClient.newHttpClient(); //设置建⽴连接超时 connect timeout var httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build(); //设置读取数据超时 read timeout var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri).build(); System.out.println(request); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } } }
POST 请求
private static void testPost() { var httpClient = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(uri) .header("Content-Type", "application/x-www-formurlencoded") .POST(HttpRequest.BodyPublishers.ofString("account=123456&pwd=1234567890")) .build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } }
异步 Get 请求
/** * 异步请求 */ private static void testAsynGet() { var httpClient = HttpClient.newBuilder().build(); var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri).build(); try { CompletableFuture<String> result = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body); System.out.println(result.get()); } catch (Exception e) { e.printStackTrace(); } }
HTTP2 请求
Http2 百度百科:
HTTP2 协议的强制要求 https,如果 ⽬标 URI 是 HTTP 的,则 ⽆法使 ⽤ HTTP 2 协议。
private static void testHttp2() { var httpClient = HttpClient.newBuilder() .connectTimeout(Duration.ofMillis(3000)) //指定版本 .version(HttpClient.Version.HTTP_2) .build(); var request = HttpRequest.newBuilder() .timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri1) .build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); System.out.println(response.version()); } catch (Exception e) { e.printStackTrace(); } }
2、javac 和 Java 命令优化
我们在 jdk11 以前运行 Java 程序,命令如下
#编译 javac xxx.java #运行 java xxx
jdk11 以后运行 Java 程序,命令如下
# 本地不会产生class文件 java xxx.java
3、ZGC(可伸缩的低延迟垃圾回收器)-实验阶段
ZGC,是一个可伸缩的低延迟垃圾收集器。 它旨在实现以下目标:
- 暂停时间不要超过 10 毫秒
- 暂停时间不会随堆大小的增加而增加,能够在很大的堆内存中进行高效垃圾回收。
Zgc 的核心是一个并发垃圾收集器,这意味着所有繁重的提升工作(标记、压缩、引用处理、字符串表清理等)都是在 Java 线程继续执行时完成的。 这大大限制了垃圾收集对应用程序响应时间的影响。
4、Epsilon GC
Epsilon GC 是一种新的实验性无运行垃圾收集器。 Epsilon GC 只处理内存分配,不实现任何内存回收机制。 它对于性能测试非常有用,可以对比其他 gc 的成本及效率。 它可以用来在测试中方便地确定内存占用和内存压力。
5、移除方法
方法 Thread.destroy ()和 Thread.stop (Throwable)已被删除。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于