IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 【JAVA单元测试】模拟高并发操作 -> 正文阅读

[开发测试]【JAVA单元测试】模拟高并发操作

近期有需求需要在项目中模拟高并发,研究了下网上博友的方案,写了这篇较为详细的实施方案,供以后参考。【源码在文末,即取即用】

1.定义高并发请求数与倒计时器

新建测试类HighConcurrentTest.java, 定义变量:

	// 并发请求数
    private static final int threadNum =10;
    // 倒计时器
    private CountDownLatch cdl =new CountDownLatch(threadNum);

2.设计实现Runable接口的用户请求类(在HighConcurrentTest类内定义)

	public class UserRequest implements Runnable {

        public UserRequest() {
        }

        public UserRequest(int no) {
            this.no = no;
        }

        public int no;

        // 重写run方法用于处理业务逻辑
        @Override
        public void run() {
            try {
                cdl.await();
            }catch (Exception e) {
                e.printStackTrace();
            }

            // todo 业务逻辑...
            System.out.println("now no = " + no);
        }
    }

3.测试高并发

	@Test
    public void testConcurrent(){
        System.out.println("start ... ");
        for (int i =0; i< threadNum; i++) {
            new Thread(new UserRequest(i)).start();
            // 倒计时计数
            cdl.countDown();
        }


        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end ... ");
    }

执行后可发现日志顺序为:

start ... 
now no = 1
now no = 0
now no = 2
now no = 4
now no = 3
now no = 5
now no = 6
now no = 7
now no = 8
now no = 9
end ... 

说明线程间互不影响,模拟成功。

完整代码:

package xyz.dongzhensong.junitlearn.util;

import org.junit.Test;

import java.util.concurrent.CountDownLatch;

public class HighConcurrentTest {

    // 并发请求数
    private static final int threadNum =10;
    // 倒计时器
    private CountDownLatch cdl =new CountDownLatch(threadNum);

    public class UserRequest implements Runnable {

        public UserRequest() {
        }

        public UserRequest(int no) {
            this.no = no;
        }

        public int no;

        // 重写run方法用于处理业务逻辑
        @Override
        public void run() {
            try {
                cdl.await();
            }catch (Exception e) {
                e.printStackTrace();
            }

            // todo 业务逻辑...
            System.out.println("now no = " + no);
        }
    }

    @Test
    public void testConcurrent(){
        System.out.println("start ... ");
        for (int i =0; i< threadNum; i++) {
            new Thread(new UserRequest(i)).start();
            // 倒计时计数
            cdl.countDown();
        }


        try {
            Thread.sleep(5000);
            // 如线程内操作执行脚本,可先阻塞线程,等待子线程执行完成
//            Thread.currentThread().join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end ... ");
    }
}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 22:00:50  更:2022-02-05 22:01:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 3:00:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码