高并发压力测试
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(()->{//阻塞线程,直到计数为0try {countDownLatch.await();} catch (InterruptedException e) {throw new RuntimeException(e);}// start 并发执行业务,每个线程执行10次for (int j = 0; j < 10; j++) {// 用业务代码替换atomicInteger.incrementAndGet();}countDownLatch2.countDown();//end});//计数器减1countDownLatch.countDown();}//保证所有线程执行完countDownLatch2.await();executorService.shutdown();log.info("atomicInteger的值为:{}", atomicInteger.get());}
}