y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

Active Object パターン (社内勉強会発表資料)

勤め先で『増補改訂版Java言語で学ぶデザインパターン入門 マルチスレッド編』の読書会を実施しており、私は第 12 章の Active Object パターンを担当しました。

www.slideshare.net

教科書のサンプルプログラムを題材に Active Object パターンについて説明したほか、以下の話題についても議論しました。これらを含む実装例を GitHub で公開しています (https://github.com/y-uti/dpmt-java)。

  • スケジューラによる実行管理が不要なケース
  • 実行順序の決定にガード条件を用いるケース
  • java.util.concurrent パッケージが提供する機能の模倣

教科書全体を読み通した格好になりましたが、全体として、現在 async/await などの形で提供される非同期処理の裏側をよく理解できる内容でした。2006 年発行の古い教科書でもあり Thread クラスを直接利用する説明が中心ですが*1、そういった説明のおかげで、基本的な部品を利用して非同期処理の枠組みを組み立てていく様子を分かりやすく学べました。また読書会としては、「今ならこう書く」「○○言語ならこう書く」という議論に発展することも多く、これは思いがけない副産物でした。

教科書の内容で少し物足りなかったのは、各章が何に関するパターンなのかという整理が明示的にはされていないところです。マルチスレッドプログラミングでの関心事には、排他制御、スレッド管理方式 (スレッドの生成や破棄)、スレッド間でのデータ送受信、などがありそうですが、そのような観点から、それぞれのパターンをもう一つ大きな分類で整理してみると、より理解が深まりそうです*2

*1:各章に「補講」として、java.util.concurrent パッケージを使って同等の内容をより抽象的に実現するコードも示されています。

*2:同じ著者の『増補改訂版Java言語で学ぶデザインパターン入門』でも、大枠としての各パターンの分類、位置付けよりも、サンプルプログラムを通して一つ一つのパターンを具体的に理解することを重視している印象があります。そのような意図で書かれているのかとも思います。