当前位置: 首页 > article >正文

高并发压力测试

高并发压力测试

CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。

需要一个并发安全的计数器来操作。CountDownLatch就可以实现。

给CountDownLatch设置一个数值。

每个业务处理完毕之后,执行一次countDown方法,指定的值每次在执行countDown方法时,对值进行-1。

主线程可以在业务处理时,执行await,主线程会阻塞等待任务处理完毕。

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 高并发模拟压测
 * 需要设置线程数、每个线程执行次数、业务代码替换
 */

@Slf4j
public class Test2 {
    public static void main(String[] args) throws InterruptedException {
        final AtomicInteger atomicInteger = new AtomicInteger(0);
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        CountDownLatch countDownLatch = new CountDownLatch(10);
        CountDownLatch countDownLatch2 = new CountDownLatch(10);
        //模拟10个线程并发
        for (int i = 0; i < 10; i++) {
            executorService.submit(()->{
                //阻塞线程,直到计数为0
                try {
                    countDownLatch.await();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                // start 并发执行业务,每个线程执行10次
                for (int j = 0; j < 10; j++) {
                    // 用业务代码替换
                    atomicInteger.incrementAndGet();
                }
                countDownLatch2.countDown();
                //end
            });
            //计数器减1
            countDownLatch.countDown();
        }
        //保证所有线程执行完
        countDownLatch2.await();
        executorService.shutdown();
        log.info("atomicInteger的值为:{}", atomicInteger.get());

    }
}

http://www.kler.cn/a/520102.html

相关文章:

  • 【go语言】map 和 list
  • Verilog边沿检测
  • 16.好数python解法——2024年省赛蓝桥杯真题
  • 谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
  • 从63 秒到 0.482 秒:深入剖析 MySQL 分页查询优化
  • pipeline快速将数据存入redis
  • 【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数
  • wordpress调用指定ID页面的链接
  • Maven下载与配置
  • SYN Flooding的攻击原理
  • 微服务网关鉴权之sa-token
  • 问题修复记录:Linux docker 部署 dify,无法调用宿主机本地服务
  • 计算机网络 (59)无线个人区域网WPAN
  • Stable Diffusion 3.5 介绍
  • 基于STM32单片机设计的宠物喂食监控系统
  • Linux系统编程:进程状态和进程优先级/nice
  • C++——动态管理
  • WinForm保持一个窗口在另一个全屏窗口的上面
  • Redis高阶5-布隆过滤器
  • MFC程序设计(四)窗口创建机制