Java 线程之 sleep 和 wait

  • Java,线程,sleep,wait,

  • sleep 是 Thread 类的静态方法。wait 是 Object 类的方法。

  • sleep 在给定的时间后,自动唤醒,继续执行后面的代码,除非被 interreput() 强行打断。而当 wait 被调用后,当前线程被挂起,直到notify 方法被调用,该线程被唤醒。

  • wait 也可以指定时间自动唤醒。

  • wait 和 notify 只能在 synchronized 方法或代码块里被调用。

  • sleep 的意思是线程休眠或者睡眠。wait 和 notify 是跟同步有关的。两者的使用要根据不同的需求场景。

sleep一般比较常用于一些需要一直循环执行的线程里,但又不希望它一直在工作,所以希望它在工作完一次循环的时候休息一下。比如需要一个线程定时的向服务器发送一个请求,在完成一个请求后,希望它稍微休息一下,不要抢占太多的CPU时间。

而 wait 和 notify 则一般用于多线程间的协作。比如A 线程负责做某一运算,如果当前运算任务的队列为空的时候,这个线程就需要被挂起,也就是会调用一个对象的 wait 方法。另外一个线程往队列里添加一个运算任务后,会调用 notify 方法,这样A 线程就知道队列里有任务了,可以开始工作了。

  1. sleep 必须捕获 interreput 异常。

  2. 实现是灵活的,但要合理。

相关文章

- EOF -

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: Java 线程之 sleep 和 wait
本文地址: https://binkery.com/archives/388.html