Java Gold合格への道 ~並行処理・Fork/Joinフレームワーク~
スポンサーリンク
こんにちは。たろすです。
今回は並行処理におけるFork/Joinフレームワークについて説明します。
Fork/Joinフレームワークとは
Forkは分割、Joinは結合を意味しています。
つまり、Fork/Joinフレームワークはタスクを分割して実行し、結果を結合するフレームワークです。
以下のように使用します。
public class Task extends RecursiveTask<String> { @Override protected String compute() { return "Task ended"; } }
public class Main { public static void main(String[] args) { try { ForkJoinPool executor = new ForkJoinPool(); ForkJoinTask<String> result = executor.submit(new Task()); System.out.println(result.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } }
Task ended
タスクの実装にはRecursiveActionクラスまたはRecursiveTask<V>クラスを継承します。
戻り値がない場合はRecursiveActionクラス、ある場合はRecursiveTask<V>クラスを継承します。
computeメソッドでタスクの処理を実装します。
タスク実行にはexecuteメソッド、invokeメソッド、submitメソッドがあり、以下のように使い分けます。
void execute(ForkJoinTask<?> task):非同期かつ処理結果なし
<T> T invoke(ForkJoinTask<T> task):同期かつ処理結果あり
<T> ForkJoinTask<T> submit(ForkJoinTask<T> task):非同期かつ処理結果あり
上記のコードで使用しているsubmitメソッドは戻り値がForkJoinTaskオブジェクトであり、getメソッドによってcomputeメソッドの戻り値を取り出せます。