JAVA学习笔记(并发编程-贰)- 并发的模拟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingdianone/article/details/83382674

Postman : Http请求模拟工具

前置条件是准备一个springboot的框架写一个test接口
将链接加入postman快捷方式
在这里插入图片描述
在这里插入图片描述
进行并发测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Postman测试比较慢。。。
在这里插入图片描述

Apache Bench (AB) : Apache附带的工具,测试网站性能

本测试1000个;并发量为50
在这里插入图片描述

  • Concurrency Level: 50 【并发量
  • Time taken for tests: 0.355 seconds 【总测试时间
  • Complete requests: 1000【完成请求数
  • Failed requests:0
  • Total transferred: 136000 bytes【响应数据头总和
  • HTML transferred: 4000 bytes【正文数据总和
  • Requests per second: 2816.64#/secl (mean)【吞吐率
  • Time per request: 17.752 ms (mean)【用户平均请求等待时间
  • Time per request: 0.355 ms] (mean, across all concurrent - requests) 【服务器平均请求等待时间
  • Transfer rate: 374.08 「Kbytes/secl received【单例时间从服务器获取的数据长度

JMeter : Apache组织开发的的压力测试工具

添加线程组
在这里插入图片描述
在这里插入图片描述
添加http请求
在这里插入图片描述
在这里插入图片描述
查看监听器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码: Semaphore, CountDownLatch等

package com.mmall.concurrency;


import com.mmall.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

@Slf4j
@NotThreadSafe
/**
 * 代码模拟并发
 */
public class ConcurrencyTest {
    //请求总数
    public static int clientTotal=5000;
    //同事并发执行的线程数
    public static int threadTotal=200;
    //计数
    public static int count=0;

    public static void main(String[] args) throws InterruptedException {
        //定义一个线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        //信号量(允许的并发数)
        final Semaphore semaphore = new Semaphore(threadTotal);
        //计数器(线程总数)
        final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
        for (int i = 0; i < clientTotal; i++) {
            executorService.execute(()->{
                try {
                    semaphore.acquire();//当前进程是否可以执行(判断并发是否小于200)
                    add();
                    semaphore.release();//释放进程
                } catch (InterruptedException e) {
                    log.error("exception",e);
                }
                countDownLatch.countDown();
            });
        }
        countDownLatch.await();
        executorService.shutdown();//关闭线程池
        log.info("count:{}",count);
    }

    private static void add(){
        count++;
    }
}

/**
 * 运行结果(正常情况下结果为5000)
 * 13:51:56.338 [main] INFO com.mmall.concurrency.ConcurrencyTest - count:4987
 */

猜你喜欢

转载自blog.csdn.net/bingdianone/article/details/83382674