Java言語で学ぶデザインパターン入門【マルチスレッド編】
以前、仕事でマルチスレッドで動くアプリケーションを開発していたのですが、同期化の部分が思っていた以上に難しく、改めて勉強しなおせねば、と思っていました。
特に困難なのは、どういう構造で同期を取るのが良いかを決めること。同期を取る部分はもちろん言語(Java)にその機構があるので簡単なのですが、全体を考えた上で同期化の構造をスッキリした形で持たせるのはスキルが必要です。
今回はそのあたりを学習するのに最適な本として、『Java言語で学ぶデザインパターン入門【マルチスレッド編】』を選びました。
序盤は結構簡単で、今までスレッドプログラミングをしたことがあれば経験的に知っていることがパターンとして記載されています。後半は、概念は知っているけど実装したことはなかったり、概念自体もよく知らなかったり、というものが大半を占めていました。
他にもJava言語に備わっているスレッドや同期化の詳細な説明や、java.util.concurrentを使った場合の解決方法、Swingのイベントディスパッチまわりの話など、色々と勉強になります。
- Single Threaded Execution
- クリティカルセクションを見極める
- Immutable
- finalを使った宣言
- インスタンスフィールドが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
- Future
- 処理の実行結果を後から取得する
- 処理が非同期(Thread-Per-MessageやWorker Threadの場合に用いる
- 実行結果取得時にはGuarded Suspensionを使用する
- Two-Phase Termination
- どこで処理が中断されても安全に終了する
- Thread#stopを使わない
- Thread#isInterruptedを使わない
- 終了要求が来たことをラッチを使って判断する
- Thread-Specific Storage
- Active Object
- 自分固有のスレッドを持つ
- 非同期メッセージの実現
- Scheduler役を置く
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 | |
ソフトバンククリエイティブ 2006-03-21 売り上げランキング : 29630 おすすめ平均 デザインパターンとは型紙(かたがみ)のことです。 分かりやすさがいい マルチスレッドを利用するなら事前に読んでおくべき本 Amazonで詳しく見る by G-Tools |