2011-06-30 51 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");