1、函数
wait是Object的一个函数,指线程处于进入等待状态,此时线程不占用任何资源,不增加时间限制。wait可以被notify和notifyAll函数唤醒(这两个也是Object的函数)。
sleep则是Thread的一个函数,指线程被调用时,占着CPU不工作.此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。
所以
sleep(100L)意思为:占用CPU,线程休眠100毫秒
wait(100L)意思为:不占用CPU,线程等待100毫秒
注意:wait和sleep最终都是调用native函数。
2、多线程
使用多线程就没法绕过同步问题,而wait和sleep对于同步锁也有不同的效果
(1)在使用上,调用obj的wait和notify函数前必须获取对象锁,即在synchronized(obj){...}代码块中。
(2)如果都在synchronized代码块中,wait(obj)函数可以释放锁,而sleep函数则不释放锁。
在wait释放锁这里有一个场景: