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 OK
GET http://www.oschina.net/ HTTP/1.1->HTTP/1.1 OK
GET http://www.apache.org/ HTTP/1.1->HTTP/1.1 OK
Shutting Down
Finish!
成功构建 (总时间: 秒) 可以看出是异步执行的!不是按照我们传入的URL参数顺序执行的!
HttpAsyncClient 的简单使用的更多相关文章
- 异步httpclient(httpasyncclient)的使用与总结
参考:异步httpclient(httpasyncclient)的使用与总结 1. 前言应用层的网络模型有同步与异步.同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请 ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- 使用异步HTTP提升客户端性能(HttpAsyncClient)
使用异步HTTP提升客户端性能(HttpAsyncClient) 大家都知道,应用层的网络模型有同步.异步之分. 同步,意为着线程阻塞,只有等本次请求全部都完成了,才能进行下一次请求. 异步,好处是不 ...
- Gradle项目学习 & HttpAsyncClient学习 & CountDownLatch学习
装了Intellij,就是装了Gradle. 新建一个Gradle项目.然后下面这个页面要勾选上面两项: Use auto-import和Create directories for empty co ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
随机推荐
- ESM CORR
http://infosecnirvana.com/arcsight-corr-install/ http://www.softpanorama.org/Admin/Event_correlation ...
- vsftpd允许root用户登录
Linux下安装vsftpd之后,默认的配置是 匿名用户可以登录,匿名帐户有两个: 用户名:anonymous 密码:空 用户名:ftp 密码:ftp 如果要用匿名进行上传删除等操作需要配置其它参数. ...
- 深入理解7816(2)---关于ATR
智能卡(此处主要指接触式CPU卡)本身始终处于被动的状态,所以终端设备在和智能卡进行数据交互的时候,需要首先给智能卡发指令,智能卡才会对应地给出应答.而智能卡告诉终端的第一句话就是ATR,亦即“复位应 ...
- java开源资源
开到一遍不错的java开源整理,摘录一下,后续遇到好的继续更新. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置 ...
- 升级 pip版本
安装第三方库:pip install Pillow 出现 You are using pip version 7.1.2, however version 9.0.1 is available. Yo ...
- poj 3692 Kindergarten (最大独立集之逆匹配)
Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and al ...
- (转)A drop-in universal solution for moving text fields out of the way of the keyboard
There are a hundred and one proposed solutions out there for how to move UITextField andUITextView o ...
- C/C++变量命名规则
变量命名规则是为了增强代码的可读性和easy维护性. 变量命名规则: 一.用最短字符表示最准确的意义. 二.使用变量前缀. 1. 整型前缀 int nId; ...
- STM32外部中断具体解释
一.基本概念 ARM Coetex-M3内核共支持256个中断,当中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32眼下支持的中断共84个(16个内部+68个外部), ...
- Sublime text3配置LiveReload
Tip: LiveReload是很棒的插件,可以在浏览器中实时预览,但是在Sublime text3里,从Package Control中安装的LiveReload是无法使用的,但是可以选择手动安装解 ...