技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

Java で wait() する時は synchronized が必要な理由

Java で wait() を呼ぶ時は、該当スレッドで synchronized していることが必要となる。これをしておかないと、wait() を読んだ時に、IllegalMonitorStateException が発生する。なので、これまでは無条件に synchronized してから wait() していた。

しかし、なぜ synchronized が必要なのかについては分かっていなかったので、ちょっと調べてみたところ、以下の記事を見つけた。

https://code-examples.net/ja/q/2a695c

上記より、synchronized してから wait() しないと、そのスレッドが意図せず wait し続けてしまう可能性があり、そうなってしまうのを防ぐ目的があると理解した。つまり、プログラマがマルチスレッドの処理でバグを作り込まないようにするための、Java 側の配慮であると思っている。他にも理由がありそうなので、また何か分かったら、ここに追記したいと思う。