java CountDownLatch测试并发数

来源:互联网 发布:淘宝海狗鞭 编辑:程序博客网 时间:2024/04/30 06:59
package test;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ConcurrentTest2 {private static int thread_num =36;// 200;private static int client_num = 30;// 460;public static void main(String[] args) throws InterruptedException {ExecutorService exec = Executors.newCachedThreadPool();// thread_num个线程可以同时访问CountDownLatch latch=new CountDownLatch(thread_num);// 模拟2000个客户端访问for (int index = 0; index < thread_num; index++) {final int NO = index;exec.execute(new TaskThread(latch,NO));}// 退出线程池exec.shutdown();long start = System.currentTimeMillis();latch.await();//等待所有工作  完成long timeSpend = (System.currentTimeMillis()-start)/1000;System.out.println( "花费1:  "+timeSpend +"秒" );//long end = (System.currentTimeMillis()-start)/1000;//当前时间离当天0点的毫秒数}static class TaskThread implements Runnable {CountDownLatch latch;int NO;public TaskThread(CountDownLatch latch, int NO) {this.latch = latch;this.NO = NO;}@Overridepublic void run() {try {System.out.println("Thread:" + NO);String host = "http://192.168.2.10:8080/revitbus/revit/list.html?";String para = "&type=0&system=1&year=2016";System.out.println(host + para);URL url = new URL(host);// 此处填写供测试的urlHttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Proxy-Connection", "Keep-Alive");connection.setDoOutput(true);connection.setDoInput(true);PrintWriter out = new PrintWriter(connection.getOutputStream());out.print(para);out.flush();out.close();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line = "";String result = "";while ((line = in.readLine()) != null) {result += line;}// System.out.println(result);// Thread.sleep((long) (Math.random()) * 1000);// 释放System.out.println("第:" + NO + " 个");//System.out.println(result);latch.countDown(); //当前线程工作} catch (Exception e) {e.printStackTrace();}};}}


如果超时的话 时间算不出来 只能不断修改thread_num  统计出临界值,然后大致估算并发数

这个大概26 27个任务以上时候会有超时 

26个大概耗时5秒  并发大概是5个。。这个时间我觉着应该没有这么多 但是暂时也没有更精确的时间差

实际并发数 应该有10个每秒

0 0
原创粉丝点击