Javaで並行処理を書く

最近はPHPやGo、JavaScriptばっかりやっていて、ほとんどJavaを触らなくなっていました。
Java9もリリースされたことですし、ここらで少し触っておこうと思います。

今回やってみるのは並行処理です。
以前、仕事で「Javaでバッチ処理」を実装した際、「メインスレッドと別スレッドでバッチを実行させる」という対応をしました。
いわゆる並行処理です。

並行処理とは

1つのCPU上で複数の処理を行うこと(この場合、実行順は保証されない)

並列処理とは

複数のCPUで1つの処理を行うこと(時間のかかる処理を分散させる)

ちなみに、JavaScriptでPromiseやコールバックを使って処理するケースは前者です。
並列処理は計算・演算面で使われるケースが多い印象です。
今回Javaで実装したのは並行処理です。
ExecutorServiceFutureを使います。

  • コード

  • 結果

一番処理に時間がかかっているタスク(8件目)とほぼ同じ時間でメイン処理が終了したことがわかります。
また、出力内容からスレッドが使いまわされていることもわかります。

いかがでしたでしょうか。
意外と簡単に実装できたことと、このjava.util.concurrentパッケージはJavaSE6からあったことが衝撃でした。
ちなみに、GoならGoroutineという機能があるので、もっと簡単に実装できます。
※ただし、プロセスやスレッドとは厳密には異なるため、アプローチや考え方が少し変わります。

余談として、内容的に大したプログラムではありませんが、メソッド宣言でfunctionと書きそうになったり、変数宣言でvalとか書いてしまい、コンパイラに怒られっぱなしでした。

カテゴリーJava

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA