『Java言語で学ぶデザインパターン入門』マルチスレッド編の作業ログ

結城浩

2002年1月18日

「原稿を一通りレビューアさんに送ったんだよ」 という話を奥さんにしたら、 奥さんから「じゃあ、すぐ本になるわね」と言われてしまった。 すみません…まだ読み直しがあるんです… 編集部にはまだ送ってもいないんです…(^_^;。 うちの奥さんはときどき編集者よりも後押しがうまい…。

ところで、『Java言語で学ぶデザインパターン入門』 マルチスレッド編の作業ログをまとめておこう。 もしかしたら、これから本を書こうとする人の参考になるかもしれない。 ならないかもしれない。

  • 2001年7月 次の本について考える
    • 2001-07-19 「次の本」の目次を考え始める(まだマルチスレッドの本とは考えていない)
    • 2001-07-24 思いつくまま書いていく。丁寧に。
    • 2001-07-26 目次案を編集部に送り、意見を受け取る。
    • 2001-07-27 マルチスレッド編としてまとめた方がしっくりくる、と判断。SingleThreadedExecutionの例。
  • 2001年8月 目次を考える。試しに少し書く。レビューア募集開始。
  • 2001年9月 レビューア募集〆切。悩みつつも書き、描く。レビューアへ送付開始。
    • 2001-09-01 SingleThreadedExecution, ActiveObject, ReadWriteLock
    • 2001-09-01 SingleThreadedExecutionを題材に、章内の構成を考える。
    • 2001-09-01 図ファイルのファイル名ルールを考える。
    • 2001-09-01 レビューア専用ページを準備。
    • 2001-09-01 Threadについての章。
    • 2001-09-02 ThreadPerMessage。サンプル整理。難しいのは練習問題へ。
    • 2001-09-02 ReadWriteLockの図。
    • 2001-09-02 ReadWriteLock。実はこのプログラムはずいぶん不完全。
    • 2001-09-03 ReadWriteLock
    • 2001-09-03 Thread。丁寧に書き進める。とてもよい。
    • 2001-09-03 表紙の絵も考えなくっちゃ。
    • 2001-09-05 WorkerThread。すごく面白くなってきた。
    • 2001-09-05 ThreadPerMessage, ThreadSpecificStorage
    • 2001-09-06 SingleThreadedExecutionの図。
    • 2001-09-06 GuardedSuspentionを読んでいるうちに、DougのSemaphore.javaに疑問を感じ、Dougにメール。
    • 2001-09-06 Is 'notify()' necessary in 'acquire()'ing Semaphore?
    • 2001-09-06 でも、私が間違っていた。concurrent.zipのソースを読むのは重要だなあ。
    • 2001-09-07 TwoPhaseTerminationのサンプルを書く。
    • 2001-09-08 [日記]レビューア募集〆切
    • 2001-09-08 ProducerConsumer。パターン記述の部分は、やっぱりカタログ形式だとやりにくい。
    • 2001-09-08 まだ「つかんで」いないなあ。
    • 2001-09-08 ProducerConsumer。エラーを起こす例というのは作るのが難しい。
    • [DP/Review2] No.000 2001-09-08 ごあいさつと事務連絡
    • 2001-09-09 ReadWriteLock。たぶんできたように思う。まだシングルロック。
    • 2001-09-11 Futureの図。POSA2に登場するパターンを少し含める。
    • 2001-09-11 TwoPhaseTermination冒頭部を書く。
    • 2001-09-11 ThreadSpecificStorage練習問題を書く。
    • 2001-09-12 「はじめに」の図。
    • 2001-09-13 wait, notify, notifyAllの図を描く。
    • 2001-09-13 Thread。だいぶ形になってきた。
    • 2001-09-14 Future。章の構成はやはり前著にあわせよう。
    • 2001-09-14 ReadWriteLock。シンプルにした。複雑なのは練習問題へ。
    • [DP/Review2] No.001 2001-09-16 目次
    • 2001-09-14 [日記]図と練習問題
    • 2001-09-17 ReadWriteLock。だいぶ形になってきた。
    • 2001-09-17 章の構成も、具体的に章を書いてみないとわからないことが多いなあ。
    • [DP/Review2] No.002 2001-09-19 はじめに
    • 2001-09-18 [日記]原稿ファイルからソースを切り出す FileSplitter.pm
    • 2001-09-20 Immutable, ThreadPerMessage
    • 2001-09-20 意識して、パターン全般の話とJavaの話をわけよう。synchronizedというのはJavaの話。
    • [DP/Review2] No.003 2001-09-22 (参考)レビューアから / FileSplitter.pm
    • 2001-09-24 レビューアにrefer.txtをつぎに送ろう。
    • 2001-09-24 章のまとめの部分は「ミニ・パターンカタログ」にする→これはなかなか難しいな。
    • 2001-09-24 Context-Problem-Solution-Implementation。
    • [DP/Review2] No.004 2001-09-24 付録:参考文献
    • 2001-09-26 情報を盛り込むことだけを考えないように。
    • 2001-09-26 「次が送られるまでにレビュー報告を送らなければならない」と勘違いしているレビューアさんがいるので対応考慮。
    • 2001-09-27 やはり序章は少し分解しよう。評価基準の章に「表」を入れよう。
    • 2001-09-28 序章を分解。
    • 2001-09-28 Doug先生に、本の目次を送る。
    • 2001-09-28 Simplifying code / contents of my pattern book
    • 2001-09-28 Doug先生から、コメントと励ましのメッセージをいただく。
    • [DP/Review2] No.005 2001-10-01 『Java言語のスレッド』(1)
    • [DP/Review2] No.006 2001-10-01 『Java言語のスレッド』(2)
    • [DP/Review2] No.007 2001-10-01 『マルチスレッドプログラムの評価基準』
  • 2001年10月 どんどん書き進める。どんどんレビューアに送る。
    • 2001-10-03 パターンカタログではなくパターン言語に近づくように、というアドバイスあり。
    • 2001-10-03 Two-Phase Terminationの扱いをどうするか悩む。他のパターンと入れ替えるか?
    • 2001-10-03 うーん、Two-Phase Terminationも、「まあ、いいかな」という気になってきた。
    • 2001-10-03 自分の理解が進むと、自明に見えてつまらなく感じるのかもしれない。
    • 2001-10-04 イラストを描いている。
    • 2001-10-05 パターン同士の関係を表した「大きな図」がやっぱり必要そうだ。
    • [DP/Review2] No.008 2001-10-05 『Single Threaded Execution』(1)
    • [DP/Review2] No.009 2001-10-05 『Single Threaded Execution』(2)
    • 2001-10-10 Immutable。
    • [DP/Review2] No.010 2001-10-11 『Immutable』(1)
    • [DP/Review2] No.011 2001-10-11 『Immutable』(2)
    • 2001-10-11 Guarded Suspension。
    • [DP/Review2] No.012 2001-10-12 『Guarded Suspension』(1)
    • [DP/Review2] No.013 2001-10-12 『Guarded Suspension』(2)
    • 2001-10-16 Fork/Join?
    • [DP/Review2] No.014 2001-10-16 『Balking』(1)
    • [DP/Review2] No.015 2001-10-16 『Balking』(2)
    • 2001-10-17 Producer Consumer。
    • 2001-10-18 Producer Consumer。
    • 2001-10-18 fork/joinにしよう。
    • 2001-10-18 これはdivide-and-conquerのMT版、recursive callのMT版である。
    • 2001-10-19 Producer Consumer。
    • [DP/Review2] No.016 2001-10-19 『Producer-Consumer』(1)
    • [DP/Review2] No.017 2001-10-19 『Producer-Consumer』(2)
    • 2001-10-21 再利用性はプログラマが苦労しないため。
    • 2001-10-21 パフォーマンスはコンピュータが苦労しないため。
    • [DP/Review2] No.018 2001-10-23 『Read-Write Lock』(1)
    • [DP/Review2] No.019 2001-10-23 『Read-Write Lock』(2)
    • [DP/Review2] No.020 2001-10-23 『Thread-Per-Message』(1)
    • [DP/Review2] No.021 2001-10-23 『Thread-Per-Message』(2)
    • 2001-10-25 レビューアに「参考になった点」を返してあげるのはよいかもしれない。
    • 2001-10-25 WorkerThreadの例が複雑になりすぎたので、小休止。
    • 2001-10-25 Balking:レビューアの意見を反映。
    • [DP/Review2] No.022 2001-10-26 本書に登場するパターンの関係図
    • 2001-10-27 スレッドの状態遷移図を作りかけ。
    • 2001-10-30 single notificationを覆すメソッドの例。
    • [DP/Review2] No.023 2001-10-30 『Worker Thread』(1)
    • [DP/Review2] No.024 2001-10-30 『Worker Thread』(2)
    • 2001-10-31 [日記]9個目のお話を書きながら、 12個目のお話——最後のお話——のことも視野に入れる。
  • 2001年11月 何度も何度も書き直す。
  • 2001年12月 やっと全体がまとまってきた
  • 2002年1月 レビューアへの送付があらかた終わる。これから読み直しだ。
    • [DP/Review2] No.035 2002-01-12 【重要】名前表記の確認
    • [DP/Review2] No.036 2002-01-12 『マルチスレッドプログラミングのパターン・ランゲージ』(1)
    • [DP/Review2] No.037 2002-01-12 『マルチスレッドプログラミングのパターン・ランゲージ』(2)
    • [DP/Review2] No.038 2002-01-12 レビューアアンケート
    • [DP/Review2] No.039 2002-01-17 『付録:Javaのメモリモデル』