zoukankan      html  css  js  c++  java
  • 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();
      }
  • 相关阅读:
    如何把List 里的数据读出来 赋值给String?
    javascript打印、设置、预览
    SQL通配符
    C# GUID的使用
    Winform 多国语言窗体的设计以及.NET中资源文件的使用
    Winfrom 重新登录
    C# string.Format()
    聚合函数的应用(转)
    C# out和ref关键字
    性能测试工具Gprof
  • 原文地址:https://www.cnblogs.com/lfyu/p/14962684.html
Copyright © 2011-2022 走看看