JAVA实现压力测试

news/2024/4/27 15:01:44

在Java中实现压力测试通常涉及到使用多线程来模拟并发操作。以下是一个简单的例子,使用Java的ExecutorServiceCallable来执行并发的任务,进行简单的压力测试。

package useful;

import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class PressTest {
    
    // Java实现压力测试
    static class StressTask implements Callable<Boolean> {
        public Boolean call() throws Exception {
            // 这里放置你的业务逻辑
            // 例如:
            // Thread.sleep(1000); // 模拟耗时操作
            Thread.sleep(getRandomNumber());
            return true;
        }
    }

 
    public static void main(String[] args) throws Exception {
//        int random = getRandomNumber();
//        System.out.println(random);
//        Thread.sleep(random);
        LocalDateTime localDateTime = LocalDateTime.now();
//        String b = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(localDateTime);
//        System.out.println(Calendar.getInstance());
        StressTest();
        System.out.println(Calendar.getInstance());
        LocalDateTime localDateTime1 = LocalDateTime.now();
//      String b = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(localDateTime1);
        System.out.println("Finish!!!!!");
    }
    
    public static int getRandomNumber() {
        // 创建一个Random对象
        Random random = new Random();
        
        // 生成一个0到1之间的随机小数
        double randomDouble = random.nextDouble();
        return (int) (randomDouble *1000);
    }
    
    public static void getRandomBetween(int min, int max) {
         Random random = new Random();
        int randomInt = random.nextInt(max - min + 1) + min;
        System.out.println("随机整数:" + randomInt);
    }

    
    public static void StressTest() throws Exception {
        // 创建固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(10); // 假设我们要10个并发线程
 
        // 提交100个并发任务
        int tasks = 100;
        Future<Boolean>[] futures = new Future[tasks];
        for (int i = 0; i < tasks; i++) {
            futures[i] = executor.submit(new StressTask());
        }
 
        // 等待所有任务完成
        for (Future<Boolean> future : futures) {
            future.get(); // 这将阻塞直到任务完成
        }
 
        // 关闭线程池
        executor.shutdown();
    }
}
 

这个例子中,我们定义了一个StressTask类,它实现了Callable接口。call方法中可以放置你要测试的业务逻辑,例如数据库操作、网络请求等。在main方法中,我们创建了一个固定大小的线程池,并提交了100个并发任务。每个Future实例对应一个任务,通过调用future.get()方法,我们等待所有任务完成。最后,我们关闭线程池以结束测试。

要进行压力测试,你需要根据实际情况调整线程池的大小以及提交的任务数量。这个例子提供了一个基本框架,你可以根据需要添加额外的监控和报告功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

​HTTP与HTTPS:网络通信的安全卫士

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

面试题 之 react

1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念&#xff0c;更高效使用虚拟 DOM 来有效地操作 DOM &#xff0c;遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…

MySQL基础之锁

基本概念 锁是一种协调多个事务对同一数据并发访问的一种机制。它确保了数据库的一致性和完整性&#xff0c;防止多个事务同时修改一份数据导致冲突。 锁的类型 锁分为全局锁、表级锁、行级锁。全局锁会锁定整个数据库实例&#xff0c;使其处于只读状态&#xff1b;表级锁会在…

如何只用两个Python函数在几分钟内创建完整的计算机视觉应用程序

本文介绍在计算机视觉开发中采用的Pipeless开源框架&#xff0c;以及如何使用几个代码函数创建一个完整的应用程序。 本文首先概述典型的计算机视觉应用程序的要求。然后&#xff0c;介绍Pipeless这一为嵌入式计算机视觉提供无服务器开发体验的开源框架。最后&#xff0c;提供一…

C# 设置AutoScroll为true没效果的原因分析和解决办法

C#中添加tabControl 分页&#xff0c;将autoscroll设置为true发现缩小窗口没有滚动条效果。该问题出现后&#xff0c;检索发现也有很多人询问了该问题&#xff0c;但是都没有给出解决方案。 原因是内部button的属性Anchor设置为top、left、right、bottom导致的缩小界面窗口也没…

抖音IP属地怎么更改

抖音是一个非常受欢迎的短视频平台&#xff0c;吸引了无数用户在上面分享自己的生活和才艺。然而&#xff0c;随着快手的火爆&#xff0c;一些用户开始担心自己的IP地址会被他人获取&#xff0c;引起个人隐私风险。那么&#xff0c;抖音用户又该如何更改到别的地方呢&#xff1…