java模拟并发

// 请求总数
public static int clientTotal = 5000;

// 同时并发执行的线程数
public static int threadTotal = 200;
  
public void insert() throws InterruptedException {
    SaveSatisfiedDetailReqPO saveSatisfiedDetailReqPO = new SaveSatisfiedDetailReqPO();
    saveSatisfiedDetailReqPO.setEventId("abcdefg");
    saveSatisfiedDetailReqPO.setExtention("10007");
    ExecutorService executorService = Executors.newFixedThreadPool(threadTotal);
    //信号量,此处用于控制并发的线程数
    final Semaphore semaphore = new Semaphore(threadTotal);
    //闭锁,可实现计数器递减
    final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
    for (int i = 0; i < clientTotal; i++) {
      executorService.execute(() -> {
        try {
          //执行此方法用于获取执行许可,当总计未释放的许可数不超过200时,
          //允许通行,否则线程阻塞等待,直到获取到许可。
          semaphore.acquire();
          service.saveSatisfiedData(saveSatisfiedDetailReqPO);
          //释放许可
          semaphore.release();
        } catch (Exception e) {
          e.printStackTrace();
        }
        countDownLatch.countDown();
      });
    }
    //线程阻塞,直到闭锁值为0时,阻塞才释放,继续往下执行
    countDownLatch.await();
    executorService.shutdown();
  }
原文地址:https://www.cnblogs.com/lfyu/p/14962684.html