お盆休みというのはシステムエンジニア、もとい社畜にとってはまとまった時間がとれる貴重な機会。プログラマを稼業に据えて以来、まとまった休みには何かしらの習得に務めることが多いのですが、今回のお盆休みはマルチスレッドに目標を定め、自分が業務で使うことが多いJavaのマルチスレッド入門書として名高い、結城浩『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』(ソフトバンク・クリエイティブ)をやり通すことにしました。
勉強がてら写経したコードは以下に設置しています。もっとも写経といっても掲載コードを丸写ししたわけではなく、適宜自分なりに書き換えています。また本書は書かれた時期にはなかったJavaの機能などを多用しています(とくにラムダやローカル変数の型推論)。個人的な反省点としては、テストコードを書かなかったということ。「テストがきらい」というよりは、本書の掲載例がテスト・ドリブンを意識したものではなかったので、ついついさぼってしまいました(´・ω・`)
さてJavaによるマルチスレッド・プログラミングのさわりを学んでみての感想ですが、ロートルで時代遅れというレッテルを張られがちなわりにマルチスレッド関連の機能は充実していると感じました。synchronized
やnotifyAll
のような低レベルのAPIもさることながら、とにかくjava.util.concurrent
が便利すぎる。業務アプリケーションの開発であれば、java.util.concurrent
で十二分に事足りるでしょう。
ただ本書のよいところは「Javaの便利なAPIを利用してみよう」では終わっていないこと。これは本書がjava.util.concurrent
よりも前に書かれたからかもしれませんが、それに頼らないマルチスレッドプログラミングのお作法を1から学ぶことができます。とくにマルチスレッドプログラミングの基本中の基本である
synchronizedや
notifyAllあるいは
wait`について、なんとなくで理解していたということもあり、あらためて学びなおすことができたのは最大の収穫でした(´・ω・`)