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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小陈期待逆袭 中级黑马   /  2013-5-26 15:14  /  1093 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小陈期待逆袭 于 2013-5-26 16:35 编辑

多余这个问题我一直迷迷糊糊,说不懂还懂点,但是让我具体来说我还说不明白。
我该怎么区分他两个,又什么时候用呢?
哪个朋友帮分析总结一下呗,小弟学习学习。

评分

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

查看全部评分

2 个回复

倒序浏览
  区别一:
sleep是Thread类的方法,是线程用来 控制自身流程的,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。
wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。
区别二 :
关于锁的释放 ,。调用sleep方法不会释放锁(自己的感觉是sleep方法本来就是和锁没有关系的,因为他是一个线程用于管理自己的方法,不涉及线程通信)

评分

参与人数 1技术分 +1 收起 理由
Sword + 1 这样就有技术分了

查看全部评分

回复 使用道具 举报
本帖最后由 、zhi 于 2013-5-26 15:50 编辑

这两个方法,说得简单点就是,当一个线程调用sleep()方法的时候,线程本身会根据sleep()方法里设定的时间停止一下,其它的一切都不变,仅仅是自身停止了,对象锁,和线程所占有的资源都不会被释放,其它想要运行的互斥线程还是得等这个线程运行完成才能运行。
当一个线程调用wait()方法的时候,线程就不但是不继续执行了,线程所占有的资源都会被释放,其它想要运行的互斥线程就可以抢夺这个线程所释放的资源来运行。而且这个wait()是没有参数的,得收到其它线程的notify()方法的时候,才能拥有争夺资源的机会,还不是马上运行。
举例子就是:3个人占用一台电脑,当正在占用电脑的人调用sleep()的时候,他就是在电脑桌(相当于锁)上睡觉,其它人还是得等他睡醒,而且他睡醒后还是继续占用电脑,直到他不想用为止,其它两个人才能去争夺这台电脑。而正在占用电脑的人调用wait()的时候,他就是离开电脑桌(相当于锁)了,其它两个人就可以争夺这台电脑了,当一个人用完电脑后调用notify()方法的时候,调用了wait()方法的人就可以和另外一个人一起争夺这台电脑的使用权了。但是不是马上就能用,抢不到就用不了。
什么时候用呢?slepp()可以让一个线程停止,运用范围比较广,但是小弟还没用过。wait()就比较常用了,可以用来控制线程的运行,建议看看张孝祥老师关于线程的视频教程。张孝祥多线程:http://edu.csdn.net/news/2012822/972a237433aa.shtml

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马