2009-07-03 62 views
3

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

回答

3

您应该熟悉java.util.concurrent包。它具有用于基于更高级库的并行编程的简单和强大的基元。这种库的一个例子是Functional Java,其具有an easy-to-use module for parallel programming

例如,下面是使用Functional Java编写的规范MapReduce示例。据统计单词的数量在一组文件,假设文件的字符流:

public static long countWords(final List<Stream<Character>> documents, 
           final ParModule m) 
{ return m.parFoldMap(documents, 
         new F<Stream<Character>, Long>() 
         { public Long f(final Stream<Character> 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; 
1

下面是JSR166工作组,是谁写的新并发网站类Java 7中

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

有上市2包:jsr166y(新并发类为Java 7)和extra166y(各种不会因为某种原因包含的类)。

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

2

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

+1

不幸的是,他们倒闭了。 http://yuiblog.com/crockford/的第一个讲座解释了原因。另外,它没有IntelliJ插件。 – mark 2012-07-27 17:16:44