不同点:
- waitp()是用于线程间通讯的,sleep()只是用于短时间暂停当前线程的。
- 调用wait()的时候会释放此线程持有的锁,但是调用sleep()不会释放掉锁(只会让出CPU,等sleep时间结束之后再来调度此线程)
- wait()方法应在同步代码块中调用,但是sleep()方法不需要。
- wait()是Object的方法,而sleep()是Thread类的方法。
- wait()是可以被notify()/notifyAll()方法唤醒的,但是sleep()方法则不会。
- sleep()方法在休眠之后会自动退出阻塞状态,wait()方法则需要等待被其他线程中断后才会退出阻塞状态。
相同点:
- 线程的wait()和sleep()状态都会被interrupt()方法中断阻塞状态,使线程抛出异常。
注意点:
- 如果在同步方法块中使用sleep()方法,会阻塞其他线程的执行(因为并没有释放掉锁,只是释放掉了CPU)。
- 使用notify()/notifyAll()方法唤醒线程,并不会让此线程马上得到锁,而是通知此线程可以去参与获得锁的竞争了。
参考:
https://blog.csdn.net/u012050154/article/details/50903326
https://juejin.im/post/5e644b2fe51d452701797444