2011-06-30 132 views
6

我很想知道是否有類似Java中的C#和/或Android SDK中的任務並行庫。來自C#的背景,我們被教導說,創建一個新線程是一個相對重要的操作,並且被指示使用線程池,或者最近的任務。TPL等效於Java/Android

因此,在我看來,任務帶來的抽象級別是理想的......有沒有類似的東西,甚至是線程池?或者是否全部只涉及製作新的Thread或製作my own threadpool

+0

關於「重量級操作」的聲明,請參閱http://stackoverflow.com/questions/2117072/java-thread-creation-overhead – skaffman

+0

看到這個問題是3歲 - 任何人都有一個更新的狀態今天藝術?我們是否仍在使用Executors和Java 5 Concurrency?或者是否有像Java 8或RxJava這樣的新實現來解決這個問題? – Nilzor

回答

3

當然它。你可以閱讀更多關於它在這裏:Executors

此外,您可以在同一頁面概述整個併發話題:Concurrency

+0

除非我錯過了一些東西,否則這不會提供延續支持。並不是說你無法在此基礎上實現它,但我懷疑這很難做到,並且在語法上也會非常糟糕。 –

+0

@KentBoogaart是的,Java沒有提供類似於繼續任務的任何東西,你必須自己編寫它。就我個人而言,我認爲延續任務是一個不好的方面,但如果你進入它,你可以看看Lightwolf框架:http://lightwolf.sourceforge.net/index.html – bezmax

+0

瞭解更多。似乎我可以使用fork/join的東西來實現類似的性質,但不知道它會是多麼優雅/可維護。 –

1

Android已經對Java類併發庫的支持,但你應該看看它支持的UI線程,並在後臺兩個運行的操作AsyncTask

這裏是一個任務的簡單的例子:

private class CharCountTask extends AsyncTask<String, Integer, Long> { 
    protected Long doInBackground(String... in) { 
    long result = 0; 
    for(int i=0,n=in.length; i<n; i++) { 
     result += in[i].length(); 
     publishProgress((int) (i/(double) count) * 100); 
    } 
    return result; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
    // update progress here 
    updateProgressBar(progress[0]); 
    } 

    protected void onPostExecute(Long result) { 
    // update the UI here 
    setTotalChars(result); 
    } 
} 

要使用它:

new CharCountTask().execute("first", "second", "third");