2009-07-03 167 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