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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天,殇心 中级黑马   /  2014-6-28 22:00  /  1926 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

sleep和wai()的区别?
wait()就Object类的方法,可以不用传递参数,释放锁对象
sleep()是Thread类的静态方法,需要传递参数,不释放锁对象

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

14 个回复

倒序浏览
wait和sleep区别: 分析这两个方法:从执行权和锁上来分析:
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。
sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。
wait:线程会释放执行权,而且线程会释放锁。
Sleep:线程会释放执行权,但不是不释放锁。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
正好复习线程,来看一下!
回复 使用道具 举报
O(∩_∩)O谢谢楼主的分享。。。
回复 使用道具 举报
mark一下,感谢分享。
回复 使用道具 举报
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源, sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep
sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源,wait(100L)是进入等待池中等待,交出cpu等系统资源供其他进程使用,在这100毫秒中,该线程可以被其他线程notify,但不同的是其他在等待池中的线程不被notify不会出来,但这个线程在等待100毫秒后会自动进入就绪队列等待系统分配资源,换句话说,sleep(100)在100毫秒后肯定会运行,但wait在100毫秒后还有等待os调用分配资源,所以wait100的停止运行时间是不确定的,但至少是100毫秒。
回复 使用道具 举报
学   习   下
回复 使用道具 举报
1楼正解  sleep()   线程示释放执行权 但是不释放锁!{:3_55:}
回复 使用道具 举报
简洁明了
回复 使用道具 举报
on-on 中级黑马 2014-6-29 13:46:22
10#
赞,很简洁
回复 使用道具 举报
赞,很简洁,学习学习。
回复 使用道具 举报
sleep(毫秒值)自动醒来
wait()永久等待,需要别的线程唤醒

  sleep()方法是Thread类的静态方法
  wait()方法是Object类的非静态方法

  sleep()不需要对象锁
  wait()必须有锁的支持

  sleep()方法,执行的时候线程不会释放对象锁
  wait()方法,执行的时候,线程放弃对象锁,被唤醒的时候,从新获取对象锁,才能运行


就这些希望能帮到你!!
回复 使用道具 举报
路过留个脚印
回复 使用道具 举报
很给力哈~
回复 使用道具 举报
各抒己见,好氛围啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马