• 这两个方法来自不同的类分别是Thread和Object
    • 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。
    • wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
    • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
    • wait会让当前线程变为阻塞状态,放弃CPU执行权,同时会释放锁,必须要在同步代码块中使用且必须要通过对象锁.wait
    • wait释放锁的目的就是为了能够让生产者写数据,防止死锁

    notify: 唤醒锁池阻塞的线程,从就绪到运行状态

    为什么wati需要放在Object类:
    因为Synchronized可以使用任意对象作为锁

    image.png