Java 如何正确编写多线程测试程序

Java 如何正确编写多线程测试程序,java,multithreading,web-services,rest,Java,Multithreading,Web Services,Rest,我正试图编写一个压力测试程序来攻击我们的web服务器。我尝试使用线程来模拟多人攻击服务器。然而,我遇到的问题是,99.9%的时间使用1个线程。2个线程似乎在10-20%的时间内都能工作,而更多的线程似乎总是失败 下面是我正在运行的代码片段,试图生成测试线程: public static final MAX = 1; // (or 2, or 100 while testing) <snip> <snip> String newParams

我正试图编写一个压力测试程序来攻击我们的web服务器。我尝试使用线程来模拟多人攻击服务器。然而,我遇到的问题是,99.9%的时间使用1个线程。2个线程似乎在10-20%的时间内都能工作,而更多的线程似乎总是失败

下面是我正在运行的代码片段,试图生成测试线程:

    public static final MAX = 1; // (or 2, or 100 while testing)
    <snip>
    <snip>

    String newParams = "{ bunch, of, test, parameters }";
    Callable<String> call1;
    ExecutorService pool = Executors.newFixedThreadPool(10);
    Future<String> f1;

    for (int i = 0; i < MAX; i++) {
    //      newParams = newParams + slight changes each iteration for each thread;
        call1 = new HttpPostClass.HttpPost(url, newParams);
        f1 = pool.submit(call1);
    }
    pool.shutdown();
public static final MAX=1;//(或2,或测试时为100)
字符串newParams=“{bunch,of,test,parameters}”;
可调用调用1;
ExecutorService池=Executors.newFixedThreadPool(10);
未来f1;
对于(int i=0;i
我不知道是因为我在循环中使用了相同的可调用/未来对象,还是因为我自己对多线程编程的无知/缺乏经验导致了这个问题


提前感谢你们能给我的任何帮助。

如果你想对web服务器进行负载测试,请查看简单但功能强大的ab:

你知道,有很多现有的压力测试网站解决方案。。。(jmeter、loadrunner、grinder立即浮现在脑海中)什么是HttpPostClass?我注意到它被注释为非线程safe@SLaks-在Apache Web服务器日志中,我收到一条套接字已关闭或SocketException消息。它失败的代码行是服务器端访问web存储服务中的数据的代码行。我检查了代码,没有静态类变量,因此我认为多线程访问服务不应该有问题。@jtahlborn-我没有考虑这些工具。我完成了服务器端的实现,对客户端很好奇,找到了GET和POST的REST方法的代码片段,我想我会帮助我们的QA小组。我仍然会尝试编写这个程序来处理线程和REST。我将向QA人员介绍这些工具。@JacksonOwens-HttpPostClass是一个类,其代码用于发出POST请求。如果你想看,我可以发布代码,但这只是我在网上找到的代码。因为它不能处理多个线程,所以我认为它不是线程安全的。是时候让我弄清楚线程安全代码是什么样子了。