题目
Thread.sleep 和 Object.wait 的区别
解释
类似问题如 “两个方法加 synchronized,一个线程进去后 sleep,另一个线程可以进入到另一个方法吗”,“sleep 会释放锁吗?”
答案
1)Object 提供的 `wait` 和 `notify`/`notifyAll` 函数是配合 `synchronized` 关键字(monitor 锁)来使用的;而 sleep 是 Thread 提供的静态方法。
两者都可以用来暂停线程的执行,wait 方法可以使得函数进入 WAITING 状态,wait(timeout) 和 sleep(timeout) 可以使函数进入 TIMED_WAITING 状态,sleep 方法必须指定 timeout。
wait,notify/notifyAll 只能在 synchronized 方法或者 synchronized 块里面使用,而 sleep 可以在任何地方使用
> sleep 是谁调用的谁去睡觉,即使在 a 线程里调用了 b 的 sleep 方法,实际上还是 a 去睡觉,要让 b 线程睡觉要在 b 的代码中调用 sleep
2)两者之间最大的区别在于:**sleep 不会释放持有的 monitor 锁,不会出让系统资源,而 `wait` 会释放掉 monitor 锁并出让系统资源**
3)一般用 sleep 暂停线程执行,而 wait 用于线程之间的通信
