Java 线程池模拟用户并发请求接口代码示例

简介: Java 线程池模拟用户并发请求接口代码示例

1.应用场景:

日常开发人员,可能自己写完接口之后,对于一些重要的接口需要进行并发的控制,一旦出现并发导致系统正常业务,或者数据出现错误,那应该是我们最不想看到的结果。

这里可能有人会说,有专门的压测工具,但是压测是主要用来测试吞吐量的。

我这里主要是想验证程序的正常业务逻辑是否符合程序设计的预期业务逻辑。所以侧重点儿不一样,而且作为一个开发人员,想要自己测试自己的程序,我个人觉得自己编码测试,是最直接有效的方式。

2.模拟实现思路:

线程池并发请求:ThreadPoolExecutor
Jdk的计数器,控制并发请求开始时间点儿。

CountDownLatch :计数器的作用,大白话给大家讲解一下,类似于赛道上有多个运动员同时准备起跑时,那个发令枪的作用,枪一响起跑线上的运动员同时开跑。

3.代码示例

package com.xxx.test;
 
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
 
 
public class TestMultiUserReq {
     
    public static void main(String[] args) throws Exception {
        //线程池设置2000个核心线程数,最大5000
        ThreadPoolExecutor executor = new ThreadPoolExecutor(2000, 5000, 2, TimeUnit.MINUTES,
                new ArrayBlockingQueue<Runnable>(5000));
        //设置计数器,计数器的作用:类似于赛道上有多个运动员同时准备起跑时,那个发令枪的作用,枪一响起跑线上的运动员同时开跑
        CountDownLatch latch = new CountDownLatch(1);
        //模拟100个用户
        int userCount = 100;//同一时间请求的用户数量
        for (int i = 0; i < userCount; i++) {
            ClientUser analogUser = new ClientUser(latch);
            executor.execute(analogUser);
        }
        //计数器減一  所有线程释放 并发访问。
        latch.countDown();
        executor.shutdown();
    }
 
 
    static class ClientUser implements Runnable {
        CountDownLatch latch;
        public ClientUser(CountDownLatch latch) {
            this.latch = latch;
 
        }
        
        @Override
        public void run() {
            long starTime = 0;
            try {
                starTime = System.currentTimeMillis();
                latch.await();
                System.out.println("开始请求接口============");
                //这里写你请求的接口逻辑代码
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            long endTime = System.currentTimeMillis();
            Long t = endTime - starTime;
            System.out.println("耗时:"+t / 1000F + "秒");
        }
    }
}

感觉对您有帮助的话,帮小编点个免费的赞吧!

相关文章
|
2月前
|
Java
在Java中如何实现接口?
实现接口是 Java 编程中的一个重要环节,它有助于提高代码的规范性、可扩展性和复用性。通过正确地实现接口,可以使代码更加灵活、易于维护和扩展。
227 64
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
98 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
185 57
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
100 38
|
1月前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
1月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
56 6
|
2月前
|
安全 Java
线程安全的艺术:确保并发程序的正确性
在多线程环境中,确保线程安全是编程中的一个核心挑战。线程安全问题可能导致数据不一致、程序崩溃甚至安全漏洞。本文将分享如何确保线程安全,探讨不同的技术策略和最佳实践。
62 6
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
40 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
183 1
|
Java
Java接口和抽象类
Java接口和抽象类
96 0