マルチコア時代のCPUリソースを有効活用--Java EE 7で進化した並列処理を理解する

森英幸
2013-06-05 10:58:00
  • このエントリーをはてなブックマークに追加

Concurrency Utilitiesの仕組み

 それでは、Concurrency Utilitiesはどのような仕組みで高効率な並列処理を実現しているのだろうか。

 その基盤となっているのが、“スレッドプール”だ。従来のようにスレッドを逐次生成するのではなく、Concurrency Utilitiesでは複数のスレッドをまとめたスレッドプールを用意し、そこからタスクにスレッドを割り当てる。また、処理が終わったタスクのスレッドは、スレッドプールに回収されて再利用される。スレッドプールに空きスレッドがない場合は、タスクはキューに入れられて空きスレッドができるまで待機することになる。

 このように、スレッド数の上限を定めてスレッドの無制限な生成を抑制しつつ、スレッドを再利用することでスレッド生成のオーバーヘッドを最小化し、並列処理のパフォーマンスを飛躍的に向上させている。

 下の画像のコードは、寺田氏が「もうやめましょう」といったコードをConcurrency Utilitiesを用いて書き換えたものだ。このコードでは、ExecutorServiceインターフェースを使ってスレッドプールを作成し、executeメソッドでRunnableインターフェースで作成したタスクにスレッドを割り当てている。

Concurrency Utilitiesを用いた並列処理のコード例
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]