Java synchronized & wait/notify2008年06月27日 16時36分43秒

Java は javadoc でソースコードから、オンラインドキュメントが生成される。ソースコードから記述を抜き出すのが基本なので、生成される内容の質は、書いた者に影響される。JDK の中に含まれる物は比較的、質がいい。

しかし、javadoc はその API のドキュメントとの性質上、言語的の事になると、見つけられない事も多くなる。配列に関することも、javadoc の中から見つけるのは難しい。時折、要素を与えつつ、インラインで配列を生成したくなるが、その文法はいつも忘れていて、ソースコードの山の中から探す事になる。

また、残念ながら、時折何度読み返しても意味の判らない物もある。IllegalMonitorStateException がその一つだった。また、wait、notify、notifyAll を読んでも見つけられない。

調べたところ、wait、notify、notifyAll は synchronized メソッドとブロックでのみ使用できるようだ。synchrnonized されていないところで使用した場合はIllegalMonitorStateException が発生する。

なるべく、synchronized されている場所を減らそうと、wait とnotify を synchronized の前後で使ったのが運の尽きだった。操作手順は正しいのに、例外が投げられる。javadoc ではなく、他を当たるまでは、何故例外が発生するのか解らなかった。