wait使用,外面没有加synchronized ,导致频繁报错。
IllegalMonitorStateException - 如果当前线程不是对象监视器的所有者报异常。
wait使用时会释放锁。并且使当前线程休眠,所以如果没有在synchronized 里面,没有获得锁。就会报错。
synchronized:同步代码块。当多个线程访问共享数据的时候,可以用同步代码块包裹避免多个线程抢占资源出现不完全的情况。
wait() notify() notifyAll() 都必须在synchronized 中使用
wait()导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。 被唤醒后按之前的顺序执行。
notifyAll() 唤醒正在等待对象监视器的所有线程
notify() 唤醒正在等待对象监视器的单个线程。
两个方法都不会释放当前的锁