昨日の続きでマルチスレッドプログラミング重要ということでJDK5から入った並行処理ユーティリティパッケージjava.util.concurrentについてちょっと調査。ちょっと見えてきた。
Executors.newSingleThreadExecutor()で生成したExecutorServiceにCallableをsubmitすると、Callableをキューに入れて別スレッドで順番に処理していってくれる。これは使える。キューを処理するスレッドとか自分で作らなくてもいいわけか。Executorsの他のメソッドでは複数のスレッドを使うExecutorServiceとかも生成できる。
Callable
Callableは戻り値ありのRunnableという感じだから他の場所でも使えそうだ。戻り値の型を指定できるというのはJDK5のGenericsのおかげですな。だからこれまで無かったのかも。
複数タスクを並列に処理していくというのはその処理手順自体が比較的複雑なわけだけど、Callableとかのインタフェースでタスクを抽象化することで、ExecutorServiceのように処理手順をカプセル化できるというのはオブジェクト指向らしくて面白い。僕はCallableさえちゃんと書けば、並行処理の専門家が作ったExecutorServiceのお世話になれるわけだ。ありがたいことだ。でも並行処理の勉強という意味ではExecutorServiceの中身をよく知らないといけないのだろうな。