java多线程,httpclient多线程
2014-12-04 00:00
155 查看
摘要: 简单的例子,随便看看
1、GetThread.java package com.aa.controller.xx; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpHead; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; /** * Created by Administrator on 2014/12/4. */ public class GetThread extends Thread{ private final HttpClient httpClient; private final HttpContext context; private final HttpHead httpHead; private final CountDownLatch threadSignal; private final ConcurrentHashMap<Integer,Boolean> hashMap; private static List<Thread> runningThreads = new ArrayList<Thread>(); public GetThread(HttpClient httpClient, HttpHead httpHead, CountDownLatch threadSignal, ConcurrentHashMap<Integer, Boolean> hashMap) { this.httpClient = httpClient; this.context = new BasicHttpContext(); this.httpHead = httpHead; this.threadSignal = threadSignal; this.hashMap = hashMap; } @Override public void run(){ //System.out.println("abc:"+Thread.currentThread().getName()); boolean b=get(); hashMap.put((int) threadSignal.getCount(), b); threadSignal.countDown(); } public boolean get() { HttpResponse response = null; try { response = httpClient.execute(httpHead); if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){ return true; }else{ return false; } } catch (Exception e) { return false; } } }
2、ThreadPoolHttpClient.java package com.aa.controller.xx; import com.aa.utilities.SysuserUtil; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpHead; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolHttpClient { // 线程池 private ExecutorService exe = null; // 线程池的容量 private static int POOL_SIZE = 5; private HttpClient client = null; List<String> urlList = null; public ThreadPoolHttpClient(List<String> urlList){ this.urlList=urlList; } public ConcurrentHashMap<Integer,Boolean> test() throws Exception { int uSize = urlList.size(); if(uSize>0 && uSize<=12){ POOL_SIZE = 4; } if(uSize>30){ POOL_SIZE = 6; } Date d1 = new Date(); final CountDownLatch threadSignal = new CountDownLatch(urlList.size()); final ConcurrentHashMap<Integer,Boolean> hashMap = new ConcurrentHashMap(); exe = Executors.newFixedThreadPool(POOL_SIZE); HttpParams params =new BasicHttpParams(); /* 从连接池中取连接的超时时间 */ ConnManagerParams.setTimeout(params, 1000); /* 连接超时 */ HttpConnectionParams.setConnectionTimeout(params, 2000); /* 请求超时 */ HttpConnectionParams.setSoTimeout(params, 4000); SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register( new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); //ClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry); PoolingClientConnectionManager cm=new PoolingClientConnectionManager(schemeRegistry); cm.setMaxTotal(10); final HttpClient httpClient = new DefaultHttpClient(cm,params); // URIs to perform GETs on //final String[] urisToGet = urls; final List<String> finalUriGet=urlList; /*使用线程池*/ for (int i = 0; i < finalUriGet.size(); i++) { final int j=i; //System.out.println("j的值:"+j); HttpHead httpHead = new HttpHead(finalUriGet.get(j)); GetThread getThread = new GetThread(httpClient,httpHead,threadSignal,hashMap); getThread.setName("线程" + j); exe.submit(getThread); } threadSignal.await(); exe.shutdown(); System.out.println("Done"); System.out.println("毫秒:"+(new Date().getTime()-d1.getTime())); return hashMap; } public ConcurrentHashMap<Integer,Boolean> getHashMapByUrls(){ ThreadPoolHttpClient threadPoolHttpClient = new ThreadPoolHttpClient(urlList); try { ConcurrentHashMap<Integer,Boolean> hashMap =threadPoolHttpClient.test(); for(Map.Entry<Integer,Boolean> e:hashMap.entrySet()){ System.out.println("key:"+e.getKey()+"_____||| value:"+e.getValue()); } return hashMap; } catch (Exception e) { e.printStackTrace(); } return null; } }
相关文章推荐
- Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置...
- Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置...
- Java:HttpClient篇,HttpClient4.2在Java中的几则应用:Get、Post参数、Session(会话)保持、Proxy(代理服务器)设置,多线程设置...
- java网络编程____httpclient多线程请求和线程池
- java类模拟客户端调用servlet (httpClient)
- java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity
- 多线程Java Socket编程示例(http://www.blogjava.net/sterning/archive/2007/10/15/152940.html)
- JAVA利用httpclient登录开心网
- Apache Commons-httpclient-3.1重定向时Cookie丢失缺陷问题(Java)。
- 基于 C++ POCO 库封装的异步多线程的 CHttpClient 类
- java 线程调用HttpClient的实力
- Java基础:利用HttpClient获取网页内容
- Java用apache的HttpClient发送Post请求
- java socket HTTPClient GET
- memcached 官方网站:http://www.danga.com/memcached/ —c++https://github.com/gwhalin/Memcached-Java-Client/downloads--java
- Java初学者实践:httpclient+HTMLParser 的应用
- 简易的Java版HttpClient
- java 模拟 POST表单操作 HTTPCLIENT的应用 及注意事项
- java httpclient(1)
- J2EE工具类:WebHttpClient.java