2012-10-02 65 views
0

我正在創建一個用於測試Web服務性能的測試工具。現在,我想測試100個用戶點擊此Web服務時我的工具的性能。
在當前,我創建了一個線程,用於在日誌中加熱並顯示請求 - 響應詳細信息。但我需要創建100個並行工作的線程,並顯示100個線程的請求響應。
我的問題是如何創造100 parallel thread's。在這裏,我嘗試創建100個線程並行,但是當我運行這個程序時,它不會調用run()方法。試圖一次使用100個線程。

這是我的代碼。

public class Main implements Runnable 
{ 
int counter= 0; 
public static void main(String args[]) throws Throwable 
{  
    Thread t[]=new Thread[100]; 
    for (int j=0; j<100;j++) 
    { 
     t[j]=new Thread(); 
     t[j].start();  
    }   
} 
public void run() 
{ 
    try { 

     System.out.println("thread " 
      +Thread.currentThread().getName()+" step "+counter++); 

    } 
    catch (Throwable t) { 
     t.printStackTrace(); 
    } 
} 
} 

給我一些提示或參考。我不明白我錯在哪裏。
在此先感謝。

+1

這不是你的問題直接待辦事項,但根據您的環境,你可以考慮在多臺PC那些線程分割否則你可能會影響你的結果作爲你的線程可能會阻止對方。如果你只有8個真正的內核,你可以並行運行8個線程,所有其他線程都必須等待。但是答覆的時間仍在計算。 – philnate

回答

5

你沒有實例化你的線程類 - 這恰好是Main。

你的類應該是這樣的:

public class Main extends Thread { 
    int counter= 0; 
    public static void main(String args[]) throws Throwable {  
     Main t[] = new Main[100]; 
     for (int j=0; j<100;j++) { 
      t[j] = new Main(); 
      t[j].start();  
     }   
    } 
    public void run() { 
     try { 
      System.out.println("thread " + Thread.currentThread().getName()+" step "+counter++); 
     } 
     catch (Throwable t) { 
      t.printStackTrace(); 
     } 
    } 
} 
+0

+1您正在創建的線程不在構造函數中使用Runnable,因此它們什麼都不做。 –

4

你可能是指t[j]=new Thread(new Main())

3

我建議你使用ExecutorService來管理你的線程,你可以提交你的Runnable作爲任務來此池。

1

我建議你使用Apache JMeter的web服務用於測試目的。它已具有請求/響應的並行線程功能。

總之: 要創建新的線程使用的構造函數:

Thread(Runnable target) 

正如你所看到的,線程實現Runnable,另一種辦法就是重寫run方法。

public class Thread implements Runnable