做压力测试的时候写了一个多线程去调用一个接口,想测试下接口最多能同时支持多少个线程,每个线程耗时多长。
最初写的代码
//调用多线程
for(int i=0;i<Integer.parseInt(architrave);i++){
new MyThread(i,Integer.parseInt(cycle)).start();
}
//获得结束时间
long endTime = System.currentTimeMillis();
System.out.println(“执行之前的时间 “+endTime);
原想使用前后时间相减就是耗时,然后除以线程数,就得到每个线程的耗时。
但是现实是多线程的方法和我获得时间的方法是同步的,多线程还没有执行完成,我就获得了结束时间,所以时间获得的不正确,如果在//获得结束时间的地方打上断点就可以获得正确的时间了,(因为断点是等待多线程执行完成才执行的)。
找到问题了就好改了,改成下面的就好了。
先在主类中设置一个静态的变量,然后在多线程的run方法中每次加一
//调用多线程
for(int i=0;i<Integer.parseInt(architrave);i++){
new MyThread(i,Integer.parseInt(cycle)).start();
}
//一直循环等待多线程结束
while(true){
//如果满足条件进入IF然后执行代码块之后break;
if(countNum == (Integer.parseInt(architrave)*Integer.parseInt(cycle))){
//获得结束时间
long endTime = System.currentTimeMillis();
System.out.println(“执行结束的时间 “+endTime);
System.out.println(“执行多线程消耗的时间 “+(endTime – startTime)+” 毫秒 “);
System.out.println(“执行每个线程一次消耗的时间 “+(endTime – startTime)/countNum + ” 毫秒 “);
request.setAttribute(“sumTime”, (endTime – startTime));
request.setAttribute(“eachTime”, (endTime – startTime)/countNum);
//跳出循环,结束
break;
}
}
使用死循环一直等待多线程结束,当多线程中逐步累加的全局变量值等于默认的循环次数时就进入,获得时间之后break,跳出循环。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13634.html