増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

本日読了。

前著と異なり、今回は筆者がセレクトしたパターンとのことで、どれも有用である。

デザインパターン」はベストプラクティス集であり、解こうとしている問題に対して、いくつかの選択肢があり、問題特性に応じたメリデメの中から選択するのかと思っていた。ところが、今回は、1つの大きなパターン(Active Object)の中の要素をそれぞれパターンと呼んでおり、どこまで真面目に実装するかが選択の基準になっているようだ。基本的に正解は1つ。「マルチスレッド」という問題領域を限定しているため、このようになっていのかもしれない。といったことを考えながら読んでいたら、まとめの章で、全体は1つのパターンですよ、と書いてあった。

  1. Single Threaded Execution−この橋を渡れるのは、たった1人
  2. Immutable−壊したくとも壊せない
  3. Guarded Suspension−用意できるまで、待っててね(P-SパターンのChannelに相当)
  4. Balking−必要なかったら、やめちゃおう(定期実行するバックグラウンド処理)
  5. Producer-Consumer−わたしが作り、あなたが使う(真ん中はChannelと呼ぶとのこと-> Mediatorの方が一般的ではと思うが、Mediatorパターンと区別を明確にしているみたい)
  6. Read-Write Lock−みんなが読んでもいいけれど、読んでる間は書いちゃだめ
  7. Thread-Per-Message−この仕事、やっといてね
  8. Worker Thread−仕事がくるまで待ち、仕事がきたら働く(Thread Pool)
  9. Future−引換券を、お先にどうぞ(非道的での結果受け渡し)
  10. Two-Phase Termination−あとかたづけしてから、おやすみなさい(Graceful shutdown、wait/sleepの場合もあるのでinterruptしてね)
  11. Thread-Specific Storage−スレッドごとのコインロッカー(これはImmutableと使い分けか)
  12. Active Object−非同期メッセージを受け取る、能動的なオブジェクト(全体の総合)