2012-12-11 74 views
4

我的問題是,我有一個活動,到那裏,我想借此 read_list方法的結果。然而,read_list方法需要花費大量的時間來完成,因此 我想創建一個新的線程,而這個運行此方法,然後 它返回到主活動。我知道我能做到與 的AsyncTask類似的SMT,但現在我想用這種方式來做到這一點。在多線程Java的Android的

public class Read<T> implements Runnable(){ 

    Thread t; 
    read(){ 
     t = new Thread(this); 
     t.start(); 
    } 


    public void run(){ 

     read_list(); 
    } 


    public ArrayList<T> read_list(){ 

     .......... 
     return ArrayList<T> 
    } 



} 

主要活動:

public Name extends Activity{ 

    . 
    . 
    . 

    Read<Data> read = new Read<Data>(); 
    read.read_list(); 

} 

問題:在上述代碼中,我將激活一個新的線程來執行 read_list方法?或者該方法將在主線程上執行?

回答

1

新的線程將不會被執行,但是調用read.read()應該開始一個新的線程

BTW 。我寧願用匿名類,恕我直言,這是更容易閱讀:

public Name<T> extends Activity{ 
    . 
    . 
    . 
    private List<T> stuff; 

    Runnable read = new Runnable(){ 
    public void run(){ 
     ... 
     stuff = new ArrayList<T>(..); 
    } 
    }; 
    read.start(); 
} 
+0

或者如果你的線程只用於一些計算,然後返回數據,你可以用它未來的對象(http://www.vogella.com/articles/JavaConcurrency/article .html#futures),但我不確定它是否在Adroid的SDK中 –

1

問題:通過上述代碼,我會激活一個新線程來執行read_list方法嗎?或者該方法將在主線程上執行?

只有Thread.start啓動一個新線程並在該新線程中調用該對象的run方法。所以不,read.read_list()不會在不同的線程中執行。

但是:

read(){ 
    t = new Thread(this); 
    t.start(); 
} 

我認爲應該是Read,它的構造。它也呼籲startrun電話read_list和丟棄結果。

因此,read_list將被調用兩次,可能併發

最後,我認爲你將有一個很難實現read_list,創建和填充任意類型

的對象
+0

能否請你建議我爲了在不同的線程來執行的方法和採取的主要活動的方法的返回值的東西嗎? –

+0

接受的答案顯示了這一點,但爲什麼要使用'Thread'? 'AsyncTask','Future'更好 –