我们知道java的Object有wait和notify方法,如果要使用wait和notify的话,那么必须在synchronized块中,否则会抛出IllegalMonitorStateException.但是为什么必须在同步块中调用呢?直接wait,然后在notify不行吗?我一直存在这样的疑问,只到后来查到了Stack Overflow的一个回答,豁然开朗.大概翻译了下: 假设我们要自定义一个blocking queue,如果没有使用synchronized的话,我们可能会这样写: clas