有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了。
java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了。但是,这种请求,一般会存在启动的先后顺序了,算不得真正的同时并发!怎么样才能做到真正的同时并发呢?是本文想说的点,java中提供了闭锁 CountDownLatch, 刚好就用来做这种事就最合适了。
只需要:
开启n个线程,加一个闭锁,开启所有线程;
待所有线程都准备好后,按下开启按钮,就可以真正的发起并发请求了。
LatchTest.java
package com.gp.user;
import com.gp.user.utils.HttpUtils;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* @Author: GP3
* @Description: 并发请求测试
* @Date: Created in 10:16 2020/4/17
* @Modified By:
*/
public class LatchTest {
private static final int NUM = 1000; //并发数
public static void main(String[] args) throws InterruptedException {
Runnable taskTemp = new Runnable() {
// 注意,此处是非线程安全的,留坑
private int iCounter;
@Override
public void run() {
// for(int i = 0; i < 10; i++) {
// 发起请求
HttpUtils.sendPost("http://172.16.7.206:8085/a/actApi/integrationTodoList",
"userName=gaopeng&pageNum=1&pageSize=15");
iCounter++;
System.out.println(System.nanoTime() + " [" + Thread.currentThread().getName() + "] iCounter = " + iCounter);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
// }
}
};
LatchT