Java言語で学ぶデザインパターン入門(マルチスレッド編)読了
「(増補改訂版)Java言語で学ぶデザインパターン入門【マルチスレッド編】」を読み終わりました。
もともと、7月ぐらいに今の仕事でデッドロックが発生したときに買ってななめ読みしていたのですが、今月に入って改めてちゃんと読み直しました。
せっかくなので、自分が思ったことをまとめてみます。
java.util.concurrent のデザイン
今、自分が携わっているシステムでは、とりあえずsynchronizedをかけとけばいいだろうという設計になっていて、全然パフォーマンスが考慮されていません。
しかも「オープンコール? なにそれ」という感じで安全性すら保たれていない状態です。
じゃあ、解決策は?となったときに、この本の内容が役に立ちました。
しかも、本の構成が
になっていたので、すぐに実践できるというのがとても助かりました。
(基礎を理解して、concurrent パッケージでさくっと実装)
また、Read-Write Lock や Executor、Future は、java.util.concurrentパッケージにある便利なクラスという認識でしかなったですが、この本で基本的な考え方(デザイン)を知ることができたので、今後使うときにはよりうまく使っていけそうです。
メソッドの起動と実行の分離
本の中で印象に残っているのが、「メソッドの起動と実行の分離」です。
通常のメソッド呼び出しであれば、起動と実行は不可分なのです。
Java言語で学ぶデザインパターン入門(マルチスレッド編)
けれども、Woker Thread パターンや Thread-Per-Message パターンでは、意識的にメソッドの起動とメソッドの実行を分離します。
今まで Executor を使っていても、このような認識をしたことがありませんでした。
なので、この二つをごっちゃにして一つのクラスに押し込めていました。
でも、こうやって考えるとそこでクラスやオブジェクトを分割することができそうです。
そうすれば、さらに細かい単位で分割して保守性を上げやすくできるのかなと思います。
(今まで意識していなかった分、うまいこと書けるのはまだ先になりそうです・・・)
今年読んだ本
今年読んだのは、この本と「Java言語で学ぶデザインパターン入門(結城浩/著)」「実践バグ管理(クジラ飛行机/著, あかさた/著)」、あとは情報処理のデータベーススペシャリスト、情報セキュリティスペシャリストの教本ぐらい*1。
来年の抱負として、もうちょっとペースを上げて読もうと思います。