A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Treasureと情 高级黑马   /  2012-2-27 20:25  /  2968 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问sleep() 和 wait() 有什么区别?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

10 个回复

倒序浏览
sleep:
控制线程休眠,单位为毫秒
wait
在同步代码中可以使用锁对象的wait()方法让当前线程等待

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
wait 直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程才能醒过来;而sleep方法休眠一段时间过后,自己醒过来,不需要唤醒。
回复 使用道具 举报
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
回复 使用道具 举报
功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁.   
sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
袁野 黑马帝 2012-2-28 10:42:45
7#
sleep() 是现成的休眠时间 wait()是让其等待需要程序员 手动去唤醒
回复 使用道具 举报
sleep()作用是休眠可以指定时间为多少毫秒 给定时间待时间到会自动运行 wait()作用是等待 需要用notift() notifyAll()唤醒一个或多个
就像毕老师的视频里举的例子 sleep(): 一哥们在往前跑 突然喊他:"那哥们给我睡100毫秒"等时间到了他会自动醒来 wait():如果跟那哥们说:"那哥们给我睡"他没有说睡多长时间,他就会一直睡下去,需要别别人唤醒

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
sleep()等规定的时间结束后,就会执行,而wait()需要唤醒
回复 使用道具 举报
一个睡 , 一个等 字面意思~~ {:soso_e120:}
回复 使用道具 举报
sleep是线程类,不释放所对象,要指定睡眠时间;wait是Object类的方法,由notify方法来唤醒。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马