相同点
- 它们都是在多线程环境下,都可以在程序的调用处阻塞指定的毫秒数,之后返回
- 它们都可以通过interrupt()打断目标线程的暂停状态,如果目标线程正在wait、sleep、join,目标线程将立即抛出InterruptedException,如果目标线程不在这些状态,则暂时不会立即抛出异常
不同点
- 每个对象都有一个锁来保证同步访问,然而sleep()阻塞了目标线程但目标线程并没有释放锁;而wait()不仅阻塞了目标线程还使目标线程释放锁,从而使得其他线程可以进入临界区
- wait()、notify()、notifyAll()只能在同步方法或同步代码块中使用,而sleep()可以在任意位置使用
- sleep()是线程Tread类的方法,导致此线程暂停执行指定毫秒数
- wait()是Object类的方法,对此对象调用wait()方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有该对象发出notify()方法后,本线程才进入对象锁定池获得对象锁进入就绪状态