关于 sleep()wait() 常考面试题

sleep() 方法和 wait() 方法对比

共同点:两者都可以暂停线程的执行。

区别

为什么 wait() 方法定义在 Object 中而不定义在 Thread 中?

wait() 是让获得对象锁的线程实现等待,会自动释放当前线程占有的对象锁。每个对象(Object)都拥有对象锁,既然要释放当前线程占有的对象锁并让其进入 WAITING 状态,自然是要操作对应的对象(Object)而非当前的线程(Thread)。

类似的问题:为什么 sleep() 方法定义在 Thread 中?

因为 sleep() 是让当前线程暂停执行,不涉及到对象类,也不需要获得对象锁。

wait()notify() 机制

wait()notify() 机制是由 Monitor 锁机制提供的

API 介绍