javaでのマルチスレッド処理(synchronizedなど)と.wait()メソッド使用上の注意

 javaでマルチスレッド処理を行う際、スレッド間で同期処理したい場合も多いと思います。そんな時使うのがsynchronizedブロックですが、これを利用するにあたって注意を述べます。  マルチスレッド処理を行うとき、対象となるクラスはThreadクラスをExtendしていると思いますが、Threadクラス内のwaitメソッドはよく使うのではないでしょうか。waitメソッドを使用する際には、その前に「条件が○○になったらwaitをやめる」というwhile文のような条件文を書かなくても動きますが、これは思わぬバグや脆弱性の原因となりうるようなので、しっかりと記述しましょう。

 javaの仕様として、wait()した後にnotify()なしで勝手に動いてしまうことがあるらしいです。

このような問題を防ぐために、条件文はしっかりと書く必要があります。


検索した時にわかりやすくしようと思ったらタイトルが長くなってしまいました。。