首页 > 编程语言 > 详细

java模拟并发

时间:2021-07-02 15:03:48      阅读:11      评论:0      收藏:0      [点我收藏+]
// 请求总数
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();
  }

 

java模拟并发

原文:https://www.cnblogs.com/lfyu/p/14962684.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!