Java並行処理プログラミング 読了

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

巻頭のまえがきから巻末の付録まで読み終わりました。
これは、いい本だと思います。Javaで並列処理のあるプログラム(Servlet/JSPなどほとんどのサーバーサイドJavaプログラムを含む)を書くことのあるプログラマ全員に薦められます。今時点で並列処理プログラムを書く予定のない人でも、未来のことはわからないので、読んでおいて損は無いと思います。扱う内容が並列処理プログラミングなので、初心者の方には多少難しいかもしれないですけど。*1

java.util.concurrentパッケージで提供される様々なクラス(各種の Executor, Queue, Lock, Atomic変数)の解説はもちろんだけど、synchronized や Object#wait & notify など旧来の並列処理ツールの解説もあるし、マルチスレッド処理のテスト手法の解説もあるし、ちゃんと理解していない人が多いと思われる共有変数の可視性についても詳しく解説してあります。生存性の問題(デッドロックなど)に比べても、可視性の問題は独学や試行錯誤では理解するのは桁違いに難しいと思います。こういった専門の本か、あるいはJVMの仕様でも読まないと正しく理解するのは難しいでしょう。
個人的に気に入ったのは「牽引」が50ページ以上もあること。「逆引き並列処理プログラミング本」みたいな使い方もある意味可能です。


余談ですが、JVMのメモリモデルの解説の章で「順序換え」の説明を読んでいると、こういった現象(あるスレッドが行った処理の結果を別のスレッドは別の順序で観測するかもしれない)は現実世界でも実は起きているんじゃないかという気分になります。


例えば、


「オチを言う前に相手が笑い出す」とか…


…、違うか。

*1:初心者には結城さんのマルチスレッド本の方がマルチスレッド入門としてわかり易くてよいかも。