黑马程序员技术交流社区

标题: wait(),sleep()有什么区别? [打印本页]

作者: xiong910627    时间: 2014-9-1 01:37
标题: wait(),sleep()有什么区别?
本帖最后由 xiong910627 于 2014-9-5 11:58 编辑

wait():???????????

sleep():????????
作者: 单线程xia    时间: 2014-9-1 02:20
。。你真能刷帖;P
作者: 狐狸FMF    时间: 2014-9-1 06:41
wait()在同步中能释放锁,sleep()不释放。
wait()是Object中的方法,sleep()是Thread中的方法。
wait()只能在同步中使用,sleep()可以用在任何地方。
sleep()是静态方法,wait()不是。
作者: 隔夜修书    时间: 2014-9-1 08:33
1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。


2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。


3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }


4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
作者: yjiang_09    时间: 2014-9-1 09:01
学习了。。。。
作者: 菜鸟一号    时间: 2014-9-1 09:13
也就是执行权释不释放的问题。
作者: 想做开发    时间: 2014-9-1 09:14
狐狸FMF 发表于 2014-9-1 06:41
wait()在同步中能释放锁,sleep()不释放。
wait()是Object中的方法,sleep()是Thread中的方法。
wait()只能 ...

很全啊   
作者: 梦里听传说    时间: 2014-9-1 09:16
:)学习了
作者: Java黑马    时间: 2014-9-1 09:47
sleep()是Thread的静态方法,wait()是Object的方法
调用sleep()时释放资源不释放锁,而wait()既释放资源又释放锁

作者: 她只是过客    时间: 2014-9-1 10:06
学习了{:2_31:}
作者: 张涛的狂怒    时间: 2014-9-1 10:06
嗯嗯,回答的都很好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2