Java 8中的并行性

Zix*_*lll 14 java parallel-processing java-8

我试图使用新的并行功能JDK8,但不幸的是,我无法让它工作.NetBeans 7.1表示不存在"并行"方法.

这种方法需要特殊导入吗?有没有人有示例代码演示Java 8并行性?

Edw*_*rzo 8

我已经玩JDK8 Lambda Developer Preview几周了.以下是我为简化代码编译和测试所做的工作:

配置JEdit以编译JDK 8代码

以下指南介绍了如何配置Apache Ant和JEdit以使用JDK 8 Lambda Expressions轻松编译源代码以及JDK 8 Lambda Developer Preview中的新API功能.

这就是我今天所做的,主要是因为还没有IDE支持这些JDK 8功能.

下载以下内容:

然后创建以下目录结构:

Sanbox
|-----jdk8
|-----ant
|-----projects
Run Code Online (Sandbox Code Playgroud)
  • 将未压缩的JDK构建放在jdk8目录中.
  • 将未压缩的Apache Ant放在ant目录中.
  • 项目目录将用于JEdit项目.

然后安装以下JEdit插件:

  • 蚂蚁农场
  • Java折叠
  • 项目构建器
  • 项目查看器
  • 项目向导
  • SVN插件(我使用它来将我的项目与我的仓库同步,​​但你可能不需要它)

现在,配置您的Apache Ant:

  • 在名为antrc_pre.bat的主文件夹中创建一个文件(即%USERPROFILE%\ antrc_pre.bat).
  • (注意:如果您使用的是Linux,可以在〜/ .ant/ant.conf中配置它).
  • 在运行任何任务之前,此文件将由Apache Ant运行,因此,通过定义JAVA_HOME变量,可以配置或覆盖要使用的JDK.
  • 在此文件的顶部定义JAVA_HOME变量,并使其指向安装JDK8的目录.有点像这样:SET JAVA_HOME=C:\Sanbox\jdk8
  • 确保在完成JDK 8会话后将其注释掉,以便Ant继续使用默认配置.

是时候配置JEdit Ant插件了

  • 在JEdit中,转到插件 - >插件选项 - > Ant Farm - >构建选项
  • 在对话框中选择选项:"使用外部脚本/构建文件运行Ant目标"
  • 选择ant.bat脚本(即C:\ Sandbox\ant\bin\ant.bat).
  • 注意:如果您使用的是Ant 1.8.x,则可能需要在插件的属性部分添加一个属性:build.compiler = javac1.7,否则在使用JDK 8进行编译时会出错.不过,我对Ant 1.7没有这个问题.

然后创建一个新的Java项目:

  • 在JEdit中,转到插件 - >项目构建器 - >创建新项目
  • 选择Java Application,然后单击Next
  • 选择项目目录作为查找文件的位置(即C:\ Sanbox\projects).

瞧!此时,JEdit将在工具栏中显示四个按钮:构建应用程序,编译,清理和运行应用程序.它们基于build.xml文件,并根据相应的Ant任务执行.你很高兴,你可以开始编写lambda表达式并使用新的API :-)

并行性示例

在上一个开发人员预览版(b50)中,实现了很少的并行性.我可以看到他们在一个单独的分支中做了更多工作(但是如果你想下载和构建OpenJDK8源代码).

但是,您可以使用在数组上Arrays.parallell创建ParallelIterable包装器的方法.这可以用来测试一些并行功能.

我做了一个例子来查找大数组中的素数.当我并行执行此操作时,我可以验证我的所有四个内核都已使用.

Integer[] source = new Integer[30000000];
for(int i=0; i<source.length; i++)
    source[i] = i;

ParallelIterable<Integer> allIntegers = Arrays.parallel(source).filter(isPrime);
Iterable<Integer> primes = allIntegers.into(new LinkedList<Integer>());
Run Code Online (Sandbox Code Playgroud)

这使用Apache Ant 8.4.x和JDk8-b50在我的JEdit项目中编译并运行良好.

我希望这有帮助.

PD:

我没有isPrime在上面的代码中定义谓词,以免模糊示例的简单性.我很确定eveyone可以轻松定义一个primality谓词来试用这段代码.


Ste*_*n C 2

我的建议是将 Netbeans 放在一边,使用纯文本编辑器编辑 Java 代码,然后使用 Java 8 工具链从命令提示符编译并运行它。这样您就可以确定您的问题不是由 Netbeans 问题引起的。