Java 线程之 sleep 和 wait

July 9, 2014

Java
  1. sleep 是 Thread 类的静态方法。wait 是 Object 类的方法。

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

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

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

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

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

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

  1. sleep 必须捕获 interreput 异常。

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

--- EOF ---

评论

  1. 好专业的网站。。。

    1. 呵呵,还不是很专业,还需要努力。

添加新评论