CountdownLatch进行压力测试

302 阅读1分钟
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;


public class Task implements Runnable {

    private final CountDownLatch startLatch;

    public Task(CountDownLatch startLatch) {
        this.startLatch = startLatch;
    }

    @Override
    public void run() {
        try {
            startLatch.countDown();
            System.out.println(Thread.currentThread().getName() + "开始执行" + System.currentTimeMillis());
//            Thread.sleep(new Random().nextInt(10)*100);
            getRequest();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }

    private static void getRequest() {

        try {
            URL url = new URL("https://blog.csdn.net/qq_14996421/article/details/102840681");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.connect();
            InputStream inputStream = conn.getInputStream();
            byte[] data = new byte[1024];
            StringBuffer sb = new StringBuffer();
            int length = 0;
            while ((length = inputStream.read(data)) != -1) {
                String s = new String(data, Charset.forName("utf-8"));
                sb.append(s);
            }
            String message = sb.toString();
            Map<String, Object> map = new HashMap<>();
            map.put("json", message);
            inputStream.close();
            conn.disconnect();

        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("test");
        }

    }

    public static void main(String[] args) {
        getRequest();
    }
}

import java.text.DecimalFormat;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class SdkConcurrencyTest {
    //读取并发线程数
    public static int threadNum = 6;
    public static CountDownLatch countDownLatch = new CountDownLatch(threadNum);

    public static void main(String[] args) throws InterruptedException {
        //初始化线程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //初始化开始时间
        long beginTime=System.currentTimeMillis();
        //循环初始化线程
        for(int i = 0; i < threadNum; i++){
            Task target = new Task(countDownLatch);
            pool.execute(target);
        }
        //关闭线程池
        pool.shutdown();
        //这一步是为了将全部线程任务执行完以后,开始执行后面的任务(计算时间,数量)
        countDownLatch.await();
        //计算总耗时、平均响应时间、QPS和错误率
        //计算总耗时
        long totalTime = System.currentTimeMillis()-beginTime;
        //等待1s
        Thread.sleep(1000);
        //设置取小数点后2位
        DecimalFormat df=new DecimalFormat(".00");
        System.out.println("总共发送"+threadNum + "次请求"+
                "\n"+"---------------------"+"\n"+
                "总耗时为: "+totalTime+
                "\n"+"---------------------"+"\n"+
                "QPS为"+df.format((double)threadNum*1000/totalTime)+"/s");
    }
}