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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵倩倩 中级黑马   /  2012-7-8 20:47  /  1738 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

上午看到一个SUN公司的面试题 提到 wait()和sleep()方法的区别  就知道都要抛异常 对于具体的区别没有深思考  下午看了会儿书 总结了几个
wait()和sleep()的区别
区别一:sleep是Thread类的方法,是线程用来控制自身进程的执行,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。
wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。
区别二:、
sleep()方法不会释放锁 因为它本身不涉及到锁  而wait()方法会释放当前进程的锁,线程间的通信由对象控制,而对象就是通过调用自身的wait()方法来控制的
区别三:使用范围  
    wait()方法控制线程  用于同步语句块中,这样才有意义

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 总结的不错!

查看全部评分

1 个回复

倒序浏览
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,
sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep
sleep()不是放锁,而wait()是释放的。
通俗的说,sleep()就是睡眠一段时间后自动醒来。
而wait()则是等待,直到有线程通知(notify())唤醒他才会重新工作。
就好比你睡觉,早上自然就行了,然后就去上班/上学了。
而和朋友出去玩,约好不见不散,你早到了,就会一直等,一直到你朋友来了告诉你“我来了”,然后你才会继续执行接下来的事情。

呵呵

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 总结的比较形象

查看全部评分

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