Java多线程做压力测试

发布时间:2024-11-23 23:40

学习Java的多线程编程 #生活技巧# #工作学习技巧# #编程学习资源#

蔡小鱼儿 于 2018-06-05 11:27:47 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

写一个多线程做压力测试的例子

public interface RequestHandler<T> {

public void handle(T result);

}

package com.arch;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.*;

public class ConcurrentTestUtil {

public static <T> void concurrentTest(long concurrentThreads, int times, final Callable<T> task,

RequestHandler<T> requestHandler, long executeTimeoutMillis)

throws InterruptedException, ExecutionException {

ExecutorService executor = Executors.newFixedThreadPool((int) concurrentThreads);

List<Future<T>> results = new ArrayList<Future<T>>(times);

long startTimeMillis = System.currentTimeMillis();

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

results.add(executor.submit(task));

}

executor.shutdown();

boolean executeCompleteWithinTimeout = executor.awaitTermination(executeTimeoutMillis,TimeUnit.MILLISECONDS);

if (!executeCompleteWithinTimeout) {

System.out.println("Execute tasks out of timeout [" + executeTimeoutMillis + "ms]");

for (Future<T> r : results) {

r.cancel(true);

}

} else {

long totalCostTimeMillis = System.currentTimeMillis() - startTimeMillis;

for (Future<T> r : results) {

if (requestHandler != null) {

requestHandler.handle(r.get());

}

}

System.out.println("concurrent threads: " + concurrentThreads + ", times: " + times);

System.out.println("total cost time(ms): " + totalCostTimeMillis + "ms, avg time(ms): " + ((double) totalCostTimeMillis / times));

System.out.println("tps: " + (double) (times * 1000) / totalCostTimeMillis);

}

}

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

ConcurrentTestUtil.concurrentTest(1000, 3000,

new Callable<String>() {

@Override

public String call() throws Exception {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

}

return "ok";

}

},

new RequestHandler<String>() {

@Override

public void handle(String result) {

System.out.println("result: " + result);

}

}, 6000);

}

}

网址:Java多线程做压力测试 https://www.yuejiaxmz.com/news/view/221704

相关内容

记一次完整的java项目压力测试
压力测试简单案例
使用 JMeter 进行压力测试
压力测试+接口测试(工具jmeter)
常用压力测试工具锦集 · 测试之家
压力测试工具集
压力测试工具
测试工具之压力测试工具推荐
常用压力测试工具锦集
软件测试之压力测试

随便看看