Thread中sleep和wait区别
摘自《java高并发编程详解:多线程与架构设计》
wait
和sleep
方法都可以使用当前线程进入阻塞状态,但两者存在本质的区别:
wait
和sleep
方法都可以使用线程进入阻塞状态wait
和sleep
方法均是可中断方法,被中断后会收到中断异常wait
是Object
方法,而sleep
是Thread
特有的方法wait
方法的执行必须在同步方法中执行,而sleep
不需要- 线程在同步方法中执行sleep方法时,并不会释放
monitor
的锁,而wait
方法则会释放monitor
锁 sleep
方法短暂休眠之后会主动退出阻塞,而wait
方法(没有指定wait
时间)则需要被其他线程中断后才能退出阻塞