15

新しい並列機能JDK8を使おうとしましたが、残念ながら動作させることができませんでした。NetBeans 7.1は、メソッド「並列」は存在しないと言っています。

このメソッドには特別なインポートが必要ですか?Java 8の並列処理を示すサンプルコードを持っている人はいますか?

4

5 に答える 5

8

私は数週間、JDK8 Lambda Developer Preview で遊んでいます。以下は、コードのコンパイルとテストを簡素化するために行うことです。

JEdi​​t を構成して JDK 8 コードをコンパイルする

次のガイドでは、Apache Ant と JEdit を構成して、JDK 8 Lambda 式と JDK 8 Lambda Developer Preview の新しい API 機能を使用してソース コードを簡単にコンパイルする方法について説明します。

基本的に、これらの JDK 8 機能をまだサポートしている IDE がないため、これは私が現在行っていることです。

以下をダウンロードします。

次に、次のディレクトリ構造を作成します。

Sanbox
|-----jdk8
|-----ant
|-----projects
  • 圧縮されていない JDK ビルドを jdk8 ディレクトリに配置します。
  • 非圧縮の Apache Ant を ant ディレクトリに配置します。
  • プロジェクト ディレクトリは、JEdit プロジェクト用になります。

次に、次の JEdit プラグインをインストールします。

  • アント ファーム
  • ジャバフォールド
  • プロジェクトビルダー
  • プロジェクトビューア
  • プロジェクト ウィザード
  • 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
  • Ant が引き続きデフォルト構成を使用できるように、JDK 8 セッションが完了したら、必ずコメントアウトしてください。

JEdi​​t Ant プラグインを構成する時間

  • JEdi​​t で Plugins -> Plugin Options -> Ant Farm -> Build Options に移動します。
  • ダイアログで、「外部スクリプト/ビルド ファイルを使用して Ant ターゲットを実行する」オプションを選択します。
  • ant.bat スクリプト (つまり、C:\Sandbox\ant\bin\ant.bat) を選択します。
  • 注: Ant 1.8.x を使用している場合、プラグインのプロパティ セクションにプロパティを追加する必要がある可能性があります: build.compiler=javac1.7。そうしないと、JDK 8 でのコンパイル時にエラーが発生します。ただし、Ant 1.7 ではこの問題は発生しませんでした。

次に、新しい Java プロジェクトを作成します。

  • JEdi​​t で Plugins -> Project Builder -> Create New Project に移動します。
  • Java アプリケーションを選択し、[次へ] をクリックします。
  • ファイルを配置する場所としてプロジェクト ディレクトリを選択します (つまり、C:\Sanbox\projects)。

出来上がり!この時点で、JEdit のツールバーに 4 つのボタンが表示されます。Build Application、Compile、Clean、および Run Application です。これらは build.xml ファイルに基づいており、対応する Ant タスクに従って実行されます。ラムダ式を書き始めて、新しい API を使用することができます:-)

並列処理の例

最後の開発者プレビュー (b50) では、並列処理はまだほとんど実装されていません。別のブランチでより多くの作業を行っていることがわかります (ただし、OpenJDK8 ソースをダウンロードしてビルドする場合)。

ただし、配列のラッパーArrays.parallellを作成するメソッドを使用することはできます。ParallelIterableこれを使用して、いくつかの並列処理機能をテストできます。

大きな配列で素数を見つける例を行いました。これを並行して実行すると、4 つのコアがすべて使用されていることを確認できました。

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

これは、Apache Ant 8.4.x および JDk8-b50 を使用した私の JEdit プロジェクトで正常にコンパイルおよび実行されます。

これが役立つことを願っています。

PD:

isPrime例の単純さをあいまいにしないために、上記のコードでは述語を定義していません。誰でも簡単に素数述語を定義して、このコードを試すことができると確信しています。

于 2012-09-02T23:16:23.973 に答える
2

NetBeansがjdk8を使用しているかどうかを確認します(疑わしいです)。そうでない場合は、組み込みのjdkではなくjdk8のローカルコピーを指すようにします。お役に立てれば。

于 2012-09-02T08:32:47.973 に答える
2

JDK8 機能を実験的にサポートするようになった Netbeansのナイトリー バージョンを使用できます。提案された修正はまだ適切に機能していないようですが、マイナーな問題が多くあります。) Lambda 対応の JDK8 を Java プラットフォームとして追加したことを確認してから、ソース レベルを実験するプロジェクトの Java 8。

ここで、JDK の最新の Lambda 対応ビルドを取得できます。

執筆時点では、静的クラスには、、およびArraysで実験できる3 種類の並列メソッドがあります。ただし、これは最終リリース前に変更される可能性が高いことに注意してください。現在、API は非常に流動的です。parallelStream()parallelPrefix()parallelSort()

于 2013-01-25T14:18:11.817 に答える
2

私の提案は、Netbeans を脇に置き、プレーン テキスト エディターを使用して Java コードを編集し、Java 8 ツールチェーンを使用してコマンド プロンプトからコンパイルおよび実行することです。そうすれば、問題が Netbeans の問題によるものではないことを確認できます。

于 2012-09-02T08:09:30.963 に答える
0

以下の例では、ドキュメント ディレクトリ内のすべてのディレクトリを検索します。

List<File> directories = Arrays.asList(new File("/Users/sid/Documents")
                               .listFiles())
                               .parallelStream()
                               .filter(t -> t.isDirectory() == true)
                               .collect(Collectors.toList());

Java 8 は、コレクションがオブジェクトの連続ストリームに変換されるストリーム サポートを提供します。コレクションのサイズが小さい場合は.stream()で十分です。しかし、大きなコレクションがあり、並列処理機能を活用したい場合は、.parallelStream()メソッドを使用できます。

于 2015-04-21T06:31:44.860 に答える