wait()方法属于Object,sleep()方法属于Thread;
wait()方法会主动释放持有的锁,而sleep()方法不会释放持有的锁;
wait()方法只能在同步方法或同步代码块中调用,否则会抛IllegalMonitorStateExeception,sleep()方法没有这个限制;
引申一下:为什么wait()方法会主动释放持有的锁?
因为如果wait()不释放持有的锁,那么其它线程将不能进入同步方法或同步代码块,进而不能调用notify()、notifyAll()方法唤醒线程,产生死锁!释放锁,让其它线程执行,也可以唤醒自己。