2017-12-24 6 views
2

対ForkJoinPoolで実行されるタスク、私は次のような状況に出くわしました:状況的使用:私は、Java 8で提供される新機能のいくつかを理解しようとしているので、新しいスレッド

私はasynchronメソッドの呼び出しを実装したいです私のアプリケーション(JavaFX)に入れます。アイデアは、GUIに関連するすべてのために別個のスレッドを提供/使用することで、バックグラウンドタスクはアプリケーションで可視出力をブロック/遅延させませんでした。

バックグラウンドタスクについては、スレッドのプールを使用するか、単にアプリケーションのメインスレッドでスレッドのプールを使用するかのいずれかを考えました。 taskRunnableであるのに対し、

CompletableFuture.runAsync(task); 

:その後、私はこのような何かをやったときにCompletableFutureクラスを使用して、標準的な方法で使用さForkJoinPoolに出くわしました。

ほとんどのチュートリアルとJavadocでは、ForkJoinPoolは "を実行するタスクを待っているスレッドを含むプール" と記述されています。また、ForkJoinPoolは、通常、ユーザーマシンのコアのサイズです。ハイパースレッディングがサポートされている場合は、倍になります。

従来のThreadを非同期に実行したいとき、私にはどのようなメリットがありますか?

+0

JavaFXアプリケーションを実装している場合は、[Worker](https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/)のようなJavaFXの機能を最初に調べるべきです。 Worker.html)および[Task](https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html)を参照してください。 –

答えて

2

ForkJoinPoolはスレッドと匹敵しません。それはThreadPoolsとかなり似ています。コードで新しいスレッドを作成すると悪いことがよくあり、制御されていないためOutOfMemoryErrorsになります。ユースケースに応じて、ForkJoinPoolまたは別のプールを使用する必要がありますが、使用することを確認する必要があります。ところで、すべてのCompletableFutureメソッドには、独自のスレッドプールを渡すためのオーバーロードがあります。

そのサイズは、VMパラメータ を介して制御することができる

  • そのことについてあなたが心配する必要はありませんので、すでに、JVMのシャットダウン時に、あなたとシャットダウンのために初期化さForkJoinPool、

    • のいくつかのメリット
    • 場合によっては問題になる可能性がありますが、仕事の盗難が有益になる可能性のあるコンピューティング・バインド・タスクに最適です。
    +0

    'ForkJoinPool'には、プール内のスレッド間に既存のロードバランシングがあることを忘れないでください。 – Turing85

    関連する問題