読んだ。
ISBN:978-4797337204:detail
この本、3 年前くらいにも一度読んでた。
なんで読んでたのか思い出してみると、あの頃ちょっとした流量制御をアプリケーションで実装する必要あったからだった。その流量制御っていうの、特定の API 呼び出しロジックを使うことのできる同時実行スレッド数に制限を加える制御だったのだけれど、これまさにセマフォの出番だよなぁみたいに思ったので。ちなみに、ぼくの大学の情報科学とかだと、セマフォだの何だの、オペレーティングシステム論とかそういう文脈ででてくる(でてきた)。なんとなくそんな薄い記憶があって、あぁこれまさにセマフォの使い所だわー、思い出したおれ偉いわーという感じだった。
その頃はそういう実装ニーズありきで読んだので、確か、JVM のメモリモデルの話(いわゆるスレッドの文脈における可視性だとか、volatile 修飾子だとかそのあたりの話)を読んだあとは、Semaphore だとか Countdown Latch だとかに、一気にジャンプしたような覚えがある。そう、確か、浦安の図書館で借りたんだった。
あの頃はたしかこの本、絶版になってて、Amazon には中古品すら無かった。その後、強烈な支持で復刊したっぽい。
ぼく個人としても、あの頃に比べると、金銭的な余裕が多少は出てきた上に、財布の紐が圧倒的ゆるゆる状態、気付かずに金や免許証*1が落ちていく状態になってたので、今回も気付いたら Amazon から書籍が届いてた。
で、この本なのだけれど、Java という文脈で Amazon を俯瞰するに、Effective Java (なんで在庫切れてんだ)と双璧を成すような評判がある。しかも良い方。
ISBN:978-4894714991:detail
とりあえず、スレッド使うのならこれ読んどけ、みたいなかんじで猛烈なお勧めの声が広大なネットを吹き回ってる。千の風になってるかんじ。実際、今回はじめて最初から最後まで通しで読んでみたんだけど、期待に沿うかんじの良い本だった。
スレッドでの同期っていうのはどういうもので、そのときにどういうことに気をつける必要があって、ロックの文法ってのはこうで、っていう基本的な話がありつつ、実際にこう書いてしまうと同期が崩れてスレッドセーフじゃなくなるんだバカが! みたいな話が実際のコードとともに説明してある。このため、あぁこういうコード見るわぁ、あぁ書いてしまいがちだわぁ、という実感とともにページを進めることができる。
書籍の中では、コードをスレッドセーフにするためには、どういう条件を満たさないといけなくて、その理論的な背景はこうで、っていうのが理詰めで説明されるので、多少読むのが重いしダルいにせよ、理解をすすめると自分の頭の中にも重厚感がでてきて、あぁ、もうスレッドだいじょうぶだわーみたいなかんじになる(危険な兆候)。
Java という言語においては、スレッドという概念はかなり開発者に親近感があるはずだとおもうんですわ。Java SE という基盤そのものがスレッドによって支えられているということもあるし、初期段階から API として公開されてる。それでもこのあたりを理解しているエンジニアって、母数の多い Java エンジニアの中でも少数で、実際に面接とかでお話するエンジニアで、スレッドプログラミングの経験があるのってマジメに少ない。フレームワークがそのあたりをうまく隠蔽してくれてる結果だと思うのだけれど、必要とされない知識は、必要性でなく好奇心によってしか得られなくなるのが世の常なので、Java 開発者の母数に対するスレッドプログラミング経験者の割合というのは、そう簡単には上がっていかないと思います。
そういう意味でも、この本を読んでおくのは大きなアドバンテージになるとおもいました。
*1:あとで書く