0

我试图通过模拟连接到服务器的多个客户端来对客户端/服务器系统进行压力测试。每个客户端都有一个线程。但是,当我运行以下代码(ClientStartEmulator() 代表客户端)时,线程按顺序运行而不是同时运行。(尽管在每个模拟客户端中有多个线程产量和睡眠)。有什么想法有什么问题吗?

另一种方法是对每个 jar 进行系统调用,但这会很烦人(此处未显示),我对返回的数组进行了一些处理。

谢谢!

ClientStartEmulator emu = new ClientStartEmulator();
    emu.start(7777, "localhost", "examplestore", "foobar", "signFiles", "foobar", true, time, max_length); 
    ArrayList results = new ArrayList() ; 
    for (int i = 0 ; i<nb_clients ; i++ ) {
        Thread client = new Thread() {
            public void run() {
                ClientStartEmulator emul = new ClientStartEmulator();
                try {
                    emul.start(7777, "localhost", "examplestore", "foobar",     "signFiles", "foobar", false, time, max_length);

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }
        };
        client.run(); 

    }
}
4

2 回答 2

3

您应该调用client.start()which 在后台启动线程。通过调用client.run(),您正在调用线程中执行 run 方法。不是你想要的我假设。

Thread代码:

/**
 * Causes this thread to begin execution; the Java Virtual Machine 
 * calls the <code>run</code> method of this thread. 
 * <p>
 * The result is that two threads are running concurrently: the 
 * current thread (which returns from the call to the 
 * <code>start</code> method) and the other thread (which executes its 
 * <code>run</code> method). 
 * ...
 */
public synchronized void start() {
   ...

start()方法创建本机线程并在新线程调用该Thread.run()方法时返回。

于 2012-04-10T15:16:32.937 回答
0

start调用run所以而不是client.run()替换 client.start()为新线程移动到可运行或运行状态

于 2012-04-10T15:36:24.143 回答