黑马程序员技术交流社区

标题: sleep() 和 wait() 有什么区别? [打印本页]

作者: 大牙到潍坊    时间: 2013-11-30 13:39
标题: sleep() 和 wait() 有什么区别?
本帖最后由 大牙到潍坊 于 2013-12-1 12:28 编辑

sleep() 和 wait() 有什么区别? 求详细解释,
作者: 黑马—严守卫    时间: 2013-11-30 13:58
Thread.sleep()是将当前线程阻塞指定的时间,没有释放锁,;Monitor.wait()是释放对象上的锁并阻止当前线程,直到它重新获取该锁。
作者: 容嬷嬷当年也是    时间: 2013-11-30 14:17
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


作者: u010209195    时间: 2013-11-30 15:15
Thread.sleep方法使当前线程在指定的时间内处于“非运行”状态。线程一直持有对象的监视器。而且若如果另一线程调用了 interrupt ()方法,它将唤醒那个“睡眠的”线程。
object.wait ()方法使当前线程出于“不可运行”状态,和 sleep ()不同的是 wait 是 object 的方法而不是 thread。调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。基本上 wait ()/notify ()与 sleep ()/interrupt ()类似,只是前者需要获取对象锁。

其实楼主可以先自己在网上搜一下,可能理解会更好的
作者: xydsdsr    时间: 2013-11-30 15:45
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
作者: honeys天空s    时间: 2013-11-30 16:34
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
作者: 许杰    时间: 2013-11-30 20:39
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。




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