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

文章目录

  • Postman : Http请求模拟工具
  • Apache Bench (AB) : Apache附带的工具,测试网站性能
  • JMeter : Apache组织开发的的压力测试工具
  • 代码: Semaphore, CountDownLatch等

Postman : Http请求模拟工具

前置条件是准备一个springboot的框架写一个test接口
将链接加入postman快捷方式
JAVA学习笔记(并发编程-贰)- 并发的模拟_第1张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第2张图片
进行并发测试
JAVA学习笔记(并发编程-贰)- 并发的模拟_第3张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第4张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第5张图片
Postman测试比较慢。。。
JAVA学习笔记(并发编程-贰)- 并发的模拟_第6张图片

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

本测试1000个;并发量为50
JAVA学习笔记(并发编程-贰)- 并发的模拟_第7张图片

  • 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组织开发的的压力测试工具

添加线程组
JAVA学习笔记(并发编程-贰)- 并发的模拟_第8张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第9张图片
添加http请求
JAVA学习笔记(并发编程-贰)- 并发的模拟_第10张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第11张图片
查看监听器
JAVA学习笔记(并发编程-贰)- 并发的模拟_第12张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第13张图片
JAVA学习笔记(并发编程-贰)- 并发的模拟_第14张图片

代码: 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
 */

你可能感兴趣的:(java并发编程学习笔记)