代码案例: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请求使用多线程执行相关推荐

  1. HttpClient Java客户端

    文章目录 HttpClient Java客户端 建立使用HttpClient的环境 HttpGet请求 HttpGet带参请求 HttpPost请求 HttpPost带参请求(提交表单数据) Http ...

  2. Java程序的运行原理及JVM的启动是多线程的吗?

    Java程序的运行原理及JVM的启动是多线程的吗? A:Java程序的运行原理 Java通过java命令会启动java虚拟机.启动JVM,等于启动了一个应用程序,也就是启动了一个进程. 该进程会自动启 ...

  3. java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...

    [Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...

  4. 五、Java中常用的API(通过包进行分类)————异常、多线程和Lambda表达式

    之前已经介绍了java.lang包下的相关类,今天将要补充两个常用的API:java.lang.Throwable和java.lang.Thread 一.异常(java.lang.Throwable) ...

  5. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

  6. java 模拟多线程并发_Java中模拟同时并发请求

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

  7. 020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步...

    目录 多线程 一.线程概述 四.线程常用方法 多线程 一.线程概述 1. 进程 正在执行的应用程序(java.exe),一个可执行的程序一次运行的过程 独立性:不同进程之间相互独立 动态性:是一直活动 ...

  8. 多个线程访问统一对象的不同方法_不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学...

    一. Java程序如何停止一个线程? 建议使用"异常法"来终止线程的继续运行.在想要被中断执行的线程中, 调用 interrupted()方法,该方法用来检验当前线程是否已经被中断 ...

  9. linux多线程_Java+Linux,深入内核源码讲解多线程之进程

    之前写了两篇文章,都是针对Linux这个系统的,为什么?我为什么这么喜欢写这个系统的知识,可能就是为了今天的内容多线程系列,现在多线程不是一个面试重点 啊,那如果你能深入系统内核回答这个知识点,面试官 ...

  10. java 线程耗尽_关于线程耗尽导致请求超时系统假死

    线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的 ...

最新文章

  1. Java学习总结:44(文件复制案例)
  2. 大规模服务设计部署经验谈
  3. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
  4. 《智能网联汽车技术路线图 2.0》重磅发布
  5. SpringBoot+MyBatis+Shiro 搭建杂谈
  6. mysql数据库表的管理(增删改)
  7. 剑指offer之中判断二叉树是不是对称二叉树(递归和非递归实现)
  8. [vue] 说说你觉得认为的vue开发规范有哪些?
  9. 主人公的出场—一个程序员的成长史(1)
  10. python怎么读文件-python怎么读json文件
  11. jQuery 知识点大纲
  12. 如果找活跃IP段!抓肉鸡必须的!
  13. IDEA 导入项目中文注释乱码解决
  14. 虚拟机上安装win7系统
  15. Cortex M4 SVC 中断
  16. Android实战 - 音心音乐播放器 (开启篇)
  17. win10时间线时间轴(Timeline)如何关闭隐藏?
  18. unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
  19. (四)激活函数与loss梯度
  20. 为什么ps里的液化工具里的部分功能用不了

热门文章

  1. BZOJ2038:[2009国家集训队]小Z的袜子——题解
  2. 新手学Docker(1)Hello World
  3. 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.7 文本编辑工具vi...
  4. 从零学React Native之11 TextInput
  5. 俊杰隐藏文件程序源码分享 C#
  6. 7.Prometheus 监控技术与实践 --- 可视化
  7. 54.购物流程(1)---simple product
  8. [2019南京网络赛D题]Robots
  9. python 并发编程 socket 服务端 客户端 阻塞io行为
  10. Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)