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

読書会情報

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

質問・議論

スレッド固有の情報の置き場所について

  • 質問: スレッド外に置くかスレッド内に置くかというのがよく分からない
  • (続): 今回の例だとスレッドとは何か?
  • 回答: ClientThread がスレッド
  • 質問: インスタンスの関係はどうなっているか?
  • 回答: ClientThread が複数あって Log は一つ
  • (続): ClientThread ごとに TSLog を持ち、その対応付けを Log が担当する

ロガーが static method であることについて

  • 質問: Log クラスの使い方を変えずにマルチスレッドにしたいという動機か?
  • 回答: そう。ClientThread に TSLog を持たせると再利用性の向上という目的を達成できない
  • 議論: DI コンテナで注入する形が今風ではないか
  • (続): シングルトンかスレッドごとにインスタンスを作るかはライフサイクル管理で

Worker Thread パターンとの同時利用について

  • 質問: 同時に使うことが一般的に困難だという理由は?
  • 回答: Worker Thread パターンだと別のタスクでもストレージが使いまわされる
  • 議論: 技術的に同時利用できないという話ではない
  • 議論: Thread ごとに分ける意図なのか task ごとに分ける意図なのかという問題
  • (続): ここでは task ごとに分ける意図というのが前提なのでは
  • 議論: ThreadLocalRandom というのがある
  • (続): これは排他制御を不要としてパフォーマンスを向上させる意図がある
  • (続): これは Worker Thread パターンで用いても問題ないのでは

アクターベースとタスクベースについて

  • 質問: これは見方の問題?

ThreadLocal が他のスレッドに漏洩することへの対処

  • 議論: ThreadLocalStorage を返すようなメソッドがあると他のスレッドに渡せてしまう
  • (続): 自分以外のスレッドからは使えないように防御することは可能か?
  • 回答: Thread ID を照合する方法などで可能なのでは?

ThreadLocal の GC について

  • 質問: ThreadLocal は内部的に Thread ID をキーとする辞書なのだろうか
  • (続): どのタイミングで回収されるのか?
  • 回答: WeakHashMap というのがある。これを使えばよいのかもしれない