区别:
一、所属类
sleep()方法是属于Thread类的方法
wait()方法是属于Object类的方法
二、sleep()和wait()方法实现阻塞的方式不一样
sleep()方法通过设置“睡眠时间”,以超时等待的方式,来实现线程阻塞。睡眠时间到了,线程才会进入就绪状态,等待执行
wait()方法不需要设置时间,一直处于等待状态,只有当调用notify方法才会进入就绪状态,等待执行
三、是否释放同步锁
sleep()方法释放CPU执行权,但不释放同步锁
wait()方法释放CPU执行权,会释放同步锁,使得其他线程可以使用同步代码块或同步方法
四、应用场合
sleep()方法可以随处使用
wiat()必须放在同步代码块中,否则会在程序运行时会扔出”java.lang.IllegalMonitorStateException“异常。
注意:
如图:在使用wait()方法时,同步代码块中锁对象要与调用wait()方法的对象是同一对象;
说白了在同步代码块中使用wait方法的对象,必须是锁对象
否则,就会报非法监控状态异常