Java语言代码模拟并发请求对接口进行压测(代码实例)
小标 2018-12-04 来源 : 阅读 2625 评论 0

摘要:本文主要向大家介绍了Java语言代码模拟并发请求对接口进行压测(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了Java语言代码模拟并发请求对接口进行压测(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


案例:编写一段代码,模拟并发请求为20,且总的请求数为1000,当1000个请求完成之后,打印“请求完成”。


实现代码:

/**

 * 目标:编写一段代码,模拟并发请求为20,且总的请求数为1000,当1000个请求完成后,打印“请求完成”

 */

@Slf4j

public class TestConcurrentRequest {

 

    // 总的请求个数

    public static final int requestTotal = 1000;

 

    // 同一时刻最大的并发线程的个数

    public static final int concurrentThreadNum = 20;

 

    public static void main(String[] args) throws InterruptedException {

        ExecutorService executorService = Executors.newCachedThreadPool();

        CountDownLatch countDownLatch = new CountDownLatch(requestTotal);

        Semaphore semaphore = new Semaphore(concurrentThreadNum);

        for (int i = 0; i< requestTotal; i++) {

            executorService.execute(()->{

                try {

                    semaphore.acquire();

                    String result = testRequestUri();

                    log.info("result:{}.", result);

                    semaphore.release();

                } catch (InterruptedException e) {

                    log.error("exception", e);

                }

                countDownLatch.countDown();

            });

        }

        countDownLatch.await();

        executorService.shutdown();

        log.info("请求完成");

    }

 

    private static String testRequestUri() {

        return HttpClientUtil.get("https://localhost:8080/test");

    }

}

   


注意:上述代码中,countDownLatch.countDown();需要放在每个线程中进行countDownLatch.countDown(),而不能通过主线程来执行countDownLatch.countDown();


输出打印日志为:


Connected to the target VM, address: '127.0.0.1:62593', transport: 'socket'


[pool-1-thread-12] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-4] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-9] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


...


[pool-1-thread-944] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-997] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-976] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-926] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-999] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[main] INFO com.example.concurrent.TestConcurrentRequest - 请求完成


可以看到,当大概1000个请求发送完成之后,才打印“请求完成”。


由于我们使用的是: ExecutorService executorService = Executors.newCachedThreadPool();因此,会不断的创建新的线程。如果改为:ExecutorService executorService = Executors.newFixedThreadPool(concurrentThreadNum);


则输出日志为:


[pool-1-thread-18] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-8] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-4] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-6] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


...


[pool-1-thread-1] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-7] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-14] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-16] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-12] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[pool-1-thread-3] INFO com.example.concurrent.TestConcurrentRequest - result:test2.


[main] INFO com.example.concurrent.TestConcurrentRequest - 请求完成


可以看到,线程[pool-1-thread-3]被复用了。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved