并行扩展在Java中等效

我在.Net开发中使用并行扩展有一些经验,但我正在寻找一些可以从易于使用的并行库中受益的Java工作。 JVM是否为并行扩展提供了任何类似的工具?

自java 5以来, java.util.concurrent包中有一些有限的支持,但完全支持java 7function 。

您应该熟悉java.util.concurrent包。 它具有简单而强大的原语,可用于并行编程,以此为基础的高级库。 这种库的一个例子是Functional Java ,它具有易于使用的并行编程模块 。

例如,这是使用Functional Java编写的规范MapReduce示例。 它计算一组文档中的单词数,假设文档是字符串:

public static long countWords(final List> documents, final ParModule m) { return m.parFoldMap(documents, new F, Long>() { public Long f(final Stream document) { return (long)fromStream(document).words().length(); }}, longAdditionMonoid) .claim(); } 

要实例化ParModule,请为其提供并行策略。 您可以实施自己的策略,或使用提供的策略。 这是一个使用16个线程的固定池:

 ExecutorService pool = newFixedThreadPool(16); ParModule m = parModule(executorStrategy(pool)); 

对于上面的示例,您需要以下导入:

 import fj.F; import fj.data.Stream; import fj.control.parallel.ParModule; import static fj.control.parallel.ParModule.parModule; import static fj.pre.Monoid.longAdditionMonoid; import static fj.data.LazyString.fromStream; import static fj.control.parallel.Strategy.executorStrategy; import static java.util.concurrent.Executors.newFixedThreadPool; import java.util.concurrent.ExecutorService; 

你应该定义尝试Ateji Parralel扩展。 http://www.ateji.com/multicore/

这是JSR166工作组的站点,他为Java 7编写了新的并发类。

http://g.oswego.edu/dl/concurrency-interest/

列出了两个包:jsr166y(Java 7的新并发类)和extra166y(由于某种原因不包括在内的各种类)。

在extra166y中的一个类, ParallelArray非常有用。 它自动并行化二进制搜索,合并排序等。