您的位置:首页 > 编程语言 > Java开发

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个每秒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: