2011-04-30 60 views
0

我對Java很新穎,我有一個項目需要每次用戶按下按鈕時創建一個新線程。我曾與MVC和Swing合作過,但我試圖找到一種方法來創建無論用戶需要多少線程。我回顧了一些信息,並嘗試使用arrayList來收集所有線程。但是我有一些問題是:在Java中實現多線程

private ThreadLibrary thread_lib = new ThreadLibrary(); 

    public TestArray(int val) { 
     for (int i=0; i < val; i++) {   
      thread_lib.addThread( new Thread(new runThread()).start() );  
     } 
    } 

由於操作不返回任何東西也不會到ArrayList添加任何東西。任何想法或更好的數據結構使用? 感謝

回答

1

new無論你構建絕對回報。這是返回voidstart方法。嘗試將線程對象存儲在一個變量中並單獨踢掉。

public TestArray(int val) { 
    for (int i = 0; i < val; i++) {  
     Thread thread = new Thread(new runThread()); 
     thread.start(); 
     thread_lib.addThread(thread);  
    } 
} 
+0

感謝您的幫助,並澄清什麼是返回void。 – othnin 2011-04-30 01:40:31

1

thread_lib.addThread( new Thread(new runThread()).start() ) 

應該是,

Thread t = new Thread(new runThread()); 
thread_lib.addThread(t); 
t.start(); 

而不是做這個的,看ThreadPoolExecutor

+0

還有一個問題。有沒有簡單的方法將任何參數傳遞給runThread類?如果我把它放在新的runthread()中,它應該不會真的可用,因爲t.start會啓動run()方法。 – othnin 2011-04-30 01:51:12

+0

好吧 - 它似乎工作,但我想不明白爲什麼。我假設它在構造函數成爲線程並運行()之前運行構造函數。不知道從長遠來看,這對我是否有用。 – othnin 2011-04-30 01:56:01

0

new確實返回Thread;這是呼叫start()返回無效。你可以簡單地做到這一點分兩步:

Thread t = new Thread(new runThread()); 
t.start(); 
thread_lib.addThread(t); 

現在,無論你實際上是否需要把它們放在一個數組中,是否是開放的問題;在線程運行後,您可以做的並不是太多。