HttpAsyncClient 的简单使用
下载地址:http://hc.apache.org/downloads.cgi
在NetBeans中导入以下jar文件:
1:一次请求:
public static void oneReuest(){ final CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault(); httpClient.start(); final HttpGet request = new HttpGet("http://www.apache.org/"); final Future future = httpClient.execute(request, null); try { HttpResponse response = (HttpResponse) future.get(); System.out.println("Response:" + response.getStatusLine()); System.out.println("Shutting down"); } catch (Exception ex) { Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex); }finally{ try { httpClient.close(); } catch (IOException ex) { Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex); } } System.out.println("执行完毕"); }
2:多次异步请求:
public static void moreRequest(){ final RequestConfig requestConfitg = RequestConfig.custom() .setSocketTimeout(3000) .setConnectTimeout(3000).build(); final CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom() .setDefaultRequestConfig(requestConfitg) .build(); httpClient.start(); final HttpGet[] requests = new HttpGet[]{ new HttpGet("http://www.apache.org/"), new HttpGet("http://www.baidu.com/"), new HttpGet("http://www.oschina.net/") }; final CountDownLatch latch = new CountDownLatch(requests.length); for(final HttpGet request: requests){ httpClient.execute(request, new FutureCallback(){ @Override public void completed(Object obj) { final HttpResponse response = (HttpResponse)obj; latch.countDown(); System.out.println(request.getRequestLine() + "->" + response.getStatusLine()); } @Override public void failed(Exception excptn) { latch.countDown(); System.out.println(request.getRequestLine() + "->" + excptn); } @Override public void cancelled() { latch.countDown(); System.out.println(request.getRequestLine() + "cancelled"); } }); } try { latch.await(); System.out.println("Shutting Down"); } catch (InterruptedException ex) { Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex); }finally{ try { httpClient.close(); } catch (IOException ex) { Logger.getLogger(Httpasyncclient.class.getName()).log(Level.SEVERE, null, ex); } } System.out.println("Finish!"); }
运行结果:
run: GET http://www.baidu.com/ HTTP/1.1->HTTP/1.1 200 OK GET http://www.oschina.net/ HTTP/1.1->HTTP/1.1 200 OK GET http://www.apache.org/ HTTP/1.1->HTTP/1.1 200 OK Shutting Down Finish! 成功构建 (总时间: 2 秒)
可以看出是异步执行的!不是按照我们传入的URL参数顺序执行的!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~