httpclient java多线程_Apache HttpClient4.5多个HTTP请求使用多线程执行
代码案例:package com.what21.http.client4_5;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
public class What21ClientMultiThreadedExecution {
public static void main(String[] args) throws Exception {
// 创建一个线程安全的连接管理
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(cm)
.build();
try {
// 创建URL数组
String[] urisToGet = {
"http://hc.apache.org/",
"http://hc.apache.org/httpcomponents-core-ga/",
"http://www.what21.com/",
};
// 创建执行线程数组
GetThread[] threads = new GetThread[urisToGet.length];
for (int i = 0; i
HttpGet httpget = new HttpGet(urisToGet[i]);
threads[i] = new GetThread(httpclient, httpget, i + 1);
}
// 启动线程
for (int j = 0; j
threads[j].start();
}
// 线程联合(线程执行完成后,在继续往下执行)
for (int j = 0; j
threads[j].join();
}
} finally {
httpclient.close();
}
System.out.println("执行完成......");
}
// 执行线程
static class GetThread extends Thread {
private final CloseableHttpClient httpClient;
private final HttpContext context;
private final HttpGet httpget;
private final int id;
public GetThread(CloseableHttpClient httpClient, HttpGet httpget, int id) {
this.httpClient = httpClient;
this.context = new BasicHttpContext();
this.httpget = httpget;
this.id = id;
}
@Override
public void run() {
try {
System.out.println(id + " | " + httpget.getURI());
CloseableHttpResponse response = httpClient.execute(httpget, context);
try {
System.out.println(id + " | get executed");
// 响应
HttpEntity entity = response.getEntity();
if (entity != null) {
byte[] bytes = EntityUtils.toByteArray(entity);
System.out.println(id + " | " + bytes.length + " bytes read");
}
} finally {
response.close();
}
} catch (Exception e) {
System.out.println(id + " | error: " + e);
}
}
}
}
输出:2 | http://hc.apache.org/httpcomponents-core-ga/
1 | http://hc.apache.org/
3 | http://www.what21.com/
3 | get executed
3 | 46300 bytes read
1 | get executed
1 | 14283 bytes read
2 | get executed
2 | 12369 bytes read
执行完成......
httpclient java多线程_Apache HttpClient4.5多个HTTP请求使用多线程执行相关推荐
- HttpClient Java客户端
文章目录 HttpClient Java客户端 建立使用HttpClient的环境 HttpGet请求 HttpGet带参请求 HttpPost请求 HttpPost带参请求(提交表单数据) Http ...
- Java程序的运行原理及JVM的启动是多线程的吗?
Java程序的运行原理及JVM的启动是多线程的吗? A:Java程序的运行原理 Java通过java命令会启动java虚拟机.启动JVM,等于启动了一个应用程序,也就是启动了一个进程. 该进程会自动启 ...
- java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...
[Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...
- 五、Java中常用的API(通过包进行分类)————异常、多线程和Lambda表达式
之前已经介绍了java.lang包下的相关类,今天将要补充两个常用的API:java.lang.Throwable和java.lang.Thread 一.异常(java.lang.Throwable) ...
- java多线程同步的四种方法_java中实现多线程的两种方法
java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...
- java 模拟多线程并发_Java中模拟同时并发请求
有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...
- 020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步...
目录 多线程 一.线程概述 四.线程常用方法 多线程 一.线程概述 1. 进程 正在执行的应用程序(java.exe),一个可执行的程序一次运行的过程 独立性:不同进程之间相互独立 动态性:是一直活动 ...
- 多个线程访问统一对象的不同方法_不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学...
一. Java程序如何停止一个线程? 建议使用"异常法"来终止线程的继续运行.在想要被中断执行的线程中, 调用 interrupted()方法,该方法用来检验当前线程是否已经被中断 ...
- linux多线程_Java+Linux,深入内核源码讲解多线程之进程
之前写了两篇文章,都是针对Linux这个系统的,为什么?我为什么这么喜欢写这个系统的知识,可能就是为了今天的内容多线程系列,现在多线程不是一个面试重点 啊,那如果你能深入系统内核回答这个知识点,面试官 ...
- java 线程耗尽_关于线程耗尽导致请求超时系统假死
线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的 ...
最新文章
- Java学习总结:44(文件复制案例)
- 大规模服务设计部署经验谈
- R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
- 《智能网联汽车技术路线图 2.0》重磅发布
- SpringBoot+MyBatis+Shiro 搭建杂谈
- mysql数据库表的管理(增删改)
- 剑指offer之中判断二叉树是不是对称二叉树(递归和非递归实现)
- [vue] 说说你觉得认为的vue开发规范有哪些?
- 主人公的出场—一个程序员的成长史(1)
- python怎么读文件-python怎么读json文件
- jQuery 知识点大纲
- 如果找活跃IP段!抓肉鸡必须的!
- IDEA 导入项目中文注释乱码解决
- 虚拟机上安装win7系统
- Cortex M4 SVC 中断
- Android实战 - 音心音乐播放器 (开启篇)
- win10时间线时间轴(Timeline)如何关闭隐藏?
- unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
- (四)激活函数与loss梯度
- 为什么ps里的液化工具里的部分功能用不了
热门文章
- BZOJ2038:[2009国家集训队]小Z的袜子——题解
- 新手学Docker(1)Hello World
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.7 文本编辑工具vi...
- 从零学React Native之11 TextInput
- 俊杰隐藏文件程序源码分享 C#
- 7.Prometheus 监控技术与实践 --- 可视化
- 54.购物流程(1)---simple product
- [2019南京网络赛D题]Robots
- python 并发编程 socket 服务端 客户端 阻塞io行为
- Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)