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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JTANISME 中级黑马   /  2014-9-21 08:51  /  1460 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sleep()和wait()的区别?

10 个回复

倒序浏览
sleep到时间自己醒
wait没人叫不会醒→_→
回复 使用道具 举报
sleep和wait的区别          * 1,sleep方法必须指定参数,wait方法可以指定参数也可以不指定,如果指定参数,根据参数的时间值之后等待,如果不指定参数直接等待          * 2,sleep方法在同步函数或者同步代码块中不释放锁对象,wait方法只能用在同步函数或同步代码块中,释放锁
回复 使用道具 举报
sheep(int) 方法里面一般要求有一个参数,指定线程休眠时间,时间到了线程会继续执行,并且在线程休眠的时候不会释放锁的执行权(如果有的话),
wait()方法是Object对象就具有的方法,功能是让线程休眠,直到有notify(),或nofifyAll()执行之后才会被别的对象唤醒,
并且在休眠的时候,释放锁的执行权.
回复 使用道具 举报
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,  sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep
回复 使用道具 举报
定格在永远 发表于 2014-9-21 12:32
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wai ...

说的不对。。。拿着锁/释放锁,跟占着cpu不是同一回事。。。。
回复 使用道具 举报
LFW 中级黑马 2014-9-21 17:00:09
7#
你去上厕所,睡着了就是sleep,拿着锁,睡醒了你继续干你想干的事,在你sleep时别人不能进厕所。你在厕所,被wait,就别人可以上厕所,因为wait时你把锁给释放了,而且你一旦wait,正常情况下都要别人去notify叫醒你,或者是给你一板砖interrupt(当然板砖了就受伤了——抛中断异常)。大概就这么回事,建议再温习毕老师的那一段视频。
回复 使用道具 举报
sleep就是睡眠 到点就醒了  wait要有程序唤醒才能醒
回复 使用道具 举报
sleep 方法是Thread类的
wait  方法是Object类

sleep 不放锁
wait  放锁,唤醒后,重新获取锁才能运行
回复 使用道具 举报
sleep是你拿着钥匙把门关了  然后去睡觉,占有房间,虽然不干啥,  wait  是你把钥匙交出啦,你从房间出来,让给别人  呵呵
回复 使用道具 举报
7楼的有意思,好理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马