java CountDownLatch测试并发数
2016-05-16 20:38
441 查看
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; } @Override public 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);// 此处填写供测试的url HttpURLConnection 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个每秒
相关文章推荐
- Java annotation
- Eclipse调试Bug的七种常用技巧
- Java中equals和==的区别
- Java出现No enclosing instance of type E is accessible
- 【Java】多线程实现方式
- java布局总结
- 【JDK】:Fork-Join框架
- java 学习曲线(Java学习书籍推荐)
- Java开发中的23种设计模式详解
- JAVA设计模式之单例模式
- java画出爱心
- java发送地址(url)如何隐藏.action
- JAVA——静态导入
- Struts上传文件fileupload
- JavaCAS操作
- 正确理解Spring AOP中的Around advice
- mac下 如何进行spring mvc开发 基础篇 (环境搭建)
- ubuntu12.04+Eclipse+opencv环境搭建与配置
- java学习之路
- Java JSP(一) 基本原理和九个隐含对象