Java言語で学ぶデザインパターン入門【マルチスレッド編】

以前、仕事でマルチスレッドで動くアプリケーションを開発していたのですが、同期化の部分が思っていた以上に難しく、改めて勉強しなおせねば、と思っていました。

特に困難なのは、どういう構造で同期を取るのが良いかを決めること。同期を取る部分はもちろん言語(Java)にその機構があるので簡単なのですが、全体を考えた上で同期化の構造をスッキリした形で持たせるのはスキルが必要です。

今回はそのあたりを学習するのに最適な本として、『Java言語で学ぶデザインパターン入門【マルチスレッド編】』を選びました。

序盤は結構簡単で、今までスレッドプログラミングをしたことがあれば経験的に知っていることがパターンとして記載されています。後半は、概念は知っているけど実装したことはなかったり、概念自体もよく知らなかったり、というものが大半を占めていました。

他にもJava言語に備わっているスレッドや同期化の詳細な説明や、java.util.concurrentを使った場合の解決方法、Swingのイベントディスパッチまわりの話など、色々と勉強になります。

  • Single Threaded Execution
  • Immutable
  • Guarded Suspension
    • Spin Lock
    • ガード条件が満たされていなければスレッドを待たせる
    • ガード条件のテストにwhileを、待たせる為にwaitを使う
  • Balking
    • ガード条件が満たされていなければ実行を中断
    • ガード条件のテストにifを、balkにはreturnかthrowを使う
  • Producer-Consumer
    • Channel役を配置する
    • データの安全性をChannelが管理する
    • 安全にデータを受け渡しする部分では、Guarded Suspentionを使う
    • executionのキャンセル可能
  • Read-Write Lock
    • Readのみであれば排他は不要
    • Readしている時はWriteできない
    • Writeしている時はRead/Writeができない
    • Writeしている時はRead/Writeができない
    • Read/Writeを管理するReadWriteLock役を置く
  • Thread-Per-Message
    • 処理の順序を気にしないときに使う
    • 戻り値が必要な場合はFutureを使う
    • スレッドは要求の度に起動する
  • Worker Thread
    • 処理を実行するスレッドを予め起動しておく
    • ワーカスレッドに渡すリクエストは継承を意識する
    • リクエストをワーカスレッドに安全に渡す(Producer-Consumer)
    • invocationとexecutionの分離
  • Future
    • 処理の実行結果を後から取得する
    • 処理が非同期(Thread-Per-MessageやWorker Threadの場合に用いる
    • 実行結果取得時にはGuarded Suspensionを使用する
  • Two-Phase Termination
    • どこで処理が中断されても安全に終了する
    • Thread#stopを使わない
    • Thread#isInterruptedを使わない
    • 終了要求が来たことをラッチを使って判断する
  • Thread-Specific Storage
    • Thread Localの他に、スレッドの属性として保存する方法もある
    • スループットに主眼を置かれているというよりも、
      • プログラムの構造を変えずにすむ
      • 排他制御が表に出てこないので、誤りをおかす危険がすくない
      という再利用性に主眼を置いている
    • コンテキストは処理に本当に使われている情報が何かが曖昧になる危険性がある
  • Active Object
    • 自分固有のスレッドを持つ
    • 非同期メッセージの実現
    • Scheduler役を置く
    増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
    増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
    ソフトバンククリエイティブ 2006-03-21
    売り上げランキング : 29630

    おすすめ平均 star
    starデザインパターンとは型紙(かたがみ)のことです。
    star分かりやすさがいい
    starマルチスレッドを利用するなら事前に読んでおくべき本

    Amazonで詳しく見る
    by G-Tools