Thread的sleep()和Object的wait()
Thread的sleep()和Object的wait()
sleep()和wait()都是用来让线程暂停执行的方法,但是它们有一些重要的区别。
1. 共同点与不同点
- 共同点:两者都可以暂停进程的执行
- 不同点:
sleep()方法没有释放锁,而wait()方法会释放锁wait()通常用于线程间交互/通信,而sleep()通常用于让线程暂停执行wait()方法调用后线程不会自动苏醒,需要别的线程调用同一个对象上的notifuy()或notifyAll()方法来唤醒,而sleep()方法调用后线程会自动苏醒,或者也可以使用wait(long timeout)方法让线程在指定时间后自动苏醒sleep()是Thread类的静态方法,而wait()是Object类的实例方法
2. 为什么wait()方法不定义在Thread类中
-
wait()是让获得对象锁的线程实现等待,会自动释放当前线程占有的对象锁。每个对象Object都有对象锁,既然要释放当前线程占有的对象锁并让其进入WAITING状态,自然要操作对应的对象Object而非当前的线程Thread。 -
为什么
sleep()定义在Thread中:sleep()是让当前线程暂停执行,并不涉及对象类,也不需要获得对象锁。
