Java 中的并行性 8

2022-09-03 15:00:12

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

此方法是否需要特殊导入?有没有人有演示 Java 8 并行性的示例代码?


答案 1

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

配置 JEdit 以编译 JDK 8 代码

以下指南介绍如何配置 Apache Ant 和 JEdit,以便使用 JDK 8 Lambda 表达式和 JDK 8 Lambda Developer Preview 中的新 API 功能轻松编译源代码。

这就是我所做的,到目前为止,基本上是因为还没有IDE支持这些JDK 8功能。

下载以下内容:

然后创建以下目录结构:

Sanbox
|-----jdk8
|-----ant
|-----projects
  • 将未压缩的 JDK 版本放在 jdk8 目录中。
  • 将未压缩的 Apache Ant 放在 ant 目录中。
  • 项目目录将用于 JEdit 项目。

然后安装以下 JEdit 插件:

  • 蚂蚁农场
  • Java Fold
  • 项目生成器
  • 项目查看器
  • 项目向导
  • 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 应用程序,然后单击下一步
  • 选择您的项目目录作为查找文件的位置(即 C:\Sanbox\projects)。

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

并行性示例

在上一个开发人员预览版 (b50) 中,几乎没有实现任何参数化。我可以看到他们在一个单独的分支中做了更多的工作(如果你想下载并构建OpenJDK8源代码)。

但是,您可以使用在数组上创建包装器的方法。这可用于测试某些并行度功能。Arrays.parallellParallelIterable

我做了一个例子来在一个大数组中查找素数。我可以验证当我并行运行时,我的所有四个内核都被使用了。

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>());

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

我希望这有帮助。

效绩数据:

我没有在上面的代码中定义谓词,以免掩盖示例的简单性。我很确定eveyone可以很容易地定义一个primality谓词来尝试这个代码。isPrime


答案 2

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


推荐