« svk2.0 on Windows | Main | OpenOfficeでPowerPointデータを編集 »

2007.01.14

ThreadPool

 Java5以降、ExecutorServiceを用いることでスレッドプールをサクッと作ることができるようになりました。例えば、最大同時実行数が10となるようなスレッドプールの場合、

ExecutorService threadPool =

 Executors.newFixedThreadPool(10);

でスレッドプールを準備し、あとはthreadPool.execute(Thread)って感じで並行処理させたいスレッドをぽいぽい投げ込めばOK。

 Java1.4の時に自前でスレッドプール(のようなもの)を実装したことがあるのですが、それを思うとすごく簡単ですね(笑)。

 で、並行処理とよく組み合わせることになりそう(僕だけ?)なのが、「全てのスレッドの処理が終わるまで待機」ってやつでしょうか。これも、Java5なら

threadPool.shutdown();

threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);

でできあがり。shutdown()を忘れると、awaitTermination以降が進まなくなります。最初それに気付かず、「終わらない」プログラムを作ってしまいました(笑)。
 ちなみに、JavaDoc(日本語版)には、
シャットダウン要求後にすべてのタスクが実行を完了する、タイムアウトが発生する、現在のスレッドで割り込みが発生する、のどれかが最初に起きるまでブロックします。
と記載されています。最初に気付きましょうね(苦笑)。

#awaitTerminationでLong.MAX_VALUEをセットしているのは、タイムアウトを実質無効としたいためです。

|

« svk2.0 on Windows | Main | OpenOfficeでPowerPointデータを編集 »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/13468664

Listed below are links to weblogs that reference ThreadPool:

« svk2.0 on Windows | Main | OpenOfficeでPowerPointデータを編集 »