ピコラボで有志により開かれている読書会の議事録を以下ご紹介します。ご興味ありましたら、「お問い合わせ」フォームで気軽にコメントなど頂けると幸いです(なお、議事録の議論内容等は各参加者個人の意見であり、会社の意見ではない点、ご了承ください)。

読書会情報

  • 書籍
    • 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
  • 発表対象
    • Chapter 7

質問・議論

役割分担について

  • 質問: Helper 役を作る必要は?
  • (続): Host の中で処理するのではいけないのか
  • 回答: 責務の分割の観点だと思う。
  • (続): Host に handle メソッドを実装しても処理は同じになる
  • 意見: handle メソッドが何種類もあった場合に Helper をインタフェースにできるとか
  • 意見: Thread-per-Message という言葉に二つの意味がある
    • message ごとに thread を作るという字面どおりの観点
    • 責務の分割という観点
  • (続): Host は Executor で Helper が Task 役なのでこう分けるとよいという設計
  • (続): Host だけ置き換えれば thread pool にするとかできる

Future パターンについて

  • 意見: handle の結果を取得できないというのは、thread per message とは関係ないのでは
  • (続): 結果を使いたいときに future パターンを使うのは直交する概念では

Runnable にした場合

  • 質問: Runnable として切り出したら Helper を implements Runnable でもいい?
  • 回答: Helper をどう使いたいかによる

ThreadFactory.newThread について

  • 質問: 新しい thread を作らないといけないのか?
  • 議論: start() して動けば何でもよいのかどうか
  • 意見: Thread は再利用できないので新しいものを作らないといけないのでは
  • 意見: 自作の ThreadFactory が pool を返していて start が実は thread を start しないみたいな

Executor を使う場合

  • 質問: Runnable と Helper は一体化してもよいのか?
  • 回答: Helper を Runnable としてしか使わないならそれでもよさそう
  • 質問: Host で Helper も注入するようにすれば丸ごと抽象化できるのか
  • 回答: そうすると Host は Executor と Runnable のペアを表すだけのクラスになる