wait使用
wait 执⾏流程:
1.使当前执⾏代码的线程进⾏等待. (把线程放到等待队列中)
2.释放当前的锁
3.满⾜⼀定条件时被唤醒, 重新尝试获取这个锁.
wait 要搭配 synchronized 来使⽤. 脱离 synchronized 使⽤ wait 会直接抛出异常.
wait 结束等待的条件:
1.其他线程调⽤该对象的 notify ⽅法.
2.wait 等待时间超时 (wait ⽅法提供⼀个带有 timeout 参数的版本, 来指定等待时间).
3.其他线程调⽤该等待线程的 interrupted ⽅法, 导致 wait 抛出
InterruptedException
异常.
⼆者的相同点:
1.
都可以让线程休眠;
2.
都可以响应 interrupt 的响应。
⼆者的不同点:
1.
wait 必须在 synchronized 中使⽤,⽽ sleep 却不⽤;
2.
sleep 是 Thread 的⽅法,⽽ wait 是 Object 的⽅法;
3.
sleep 不释放锁,wait 释放锁;
4.
sleep 有明确的终⽌等待时间,⽽ wait 有可能⽆限期的等待下去;
5.
sleep 和 wait 产⽣的线程状态是不同的,sleep 是 TIMED_WAITING 状态,⽽ wait 是 WAITING 状态。