• 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();
      }
  • 相关阅读:
    shell:定时任务crontab
    shell:采集进程的cpu和内存利用率_随手记1
    临时记录
    python:numpy库和matplotlib库
    python:urllib:HTTPResponse对象的用法
    美国亚马逊图片打不开
    互联网协议
    range 和 xrange
    国内服务器的端口开放问题
    Mac上设置Chrome跨域
  • 原文地址:https://www.cnblogs.com/lfyu/p/14962684.html
Copyright © 2020-2023  润新知