黑马程序员技术交流社区

标题: wait()与sleep()的适用场景?? [打印本页]

作者: laizidiyu    时间: 2011-11-25 16:19
标题: wait()与sleep()的适用场景??
wait()与sleep()的适用场景??
作者: 侯伟浩    时间: 2011-11-25 17:42
延迟操作用sleep最好,可以控制时间。wait用在同步块中,使用wait会使当前线程释放锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行。wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行
作者: 清秋    时间: 2011-11-25 19:32
sleep()是一个延时的操作,时间到了后就具备执行资格

wait()只有当notify()后才能具备执行资格

在多线程里用。。。
作者: 冯敏    时间: 2011-11-25 22:49
wait(),当你不知道让该线程等待多长时间的时候可以用,
比如说有一个高级线程,必须等高级线程执行完,再继续执行这个线程但不知道高级线程会执行多长时间,所以用wait()方法,当高级线程执行完了,调用notify方法(或notifyAll)唤醒等待线程,
sleep(time)方法要传递一个时间参数,当时间一到,线程会继续执行,这个方法比较容易其睡眠时间,

我按我自己理解的方式写的,语言上可能组织有点乱,希望能听明白。。。
作者: 武超    时间: 2011-11-27 16:58
在多线程程序中,sleep()用来暂停当前线程,CPU提供给其他线程,时间到了就回来,
wait()是暂停正在运行的线程,来执行其他线程,直到其他线程中的notify()函数被执行,再回到wait()继续开始执行
作者: wanghongye    时间: 2011-11-27 18:06
Wait是Object类的方法,范围是使该Object实例所处的线程。
Sleep()是Thread类专属的静态方法,针对一个特定的线程。
一般情况下在线程中若只是想暂停就可以不用wait,只要用Thread.sleep(...)这个方法,就像睡觉会睡过点一样,sleep的线程在时间结束后也不一定能够立即恢复执行。


作者: 颜小飞    时间: 2011-11-28 09:52
sleep()用来暂停一个指定的时间内不运行,sleep的运行与否由线程自己设定的时间控制。
wait主要用来用同同步块中其它线程间的通信。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2