黑马程序员技术交流社区

标题: sleep()和wait()方法之间有什么区别? [打印本页]

作者: 310415798    时间: 2015-5-7 10:52
标题: sleep()和wait()方法之间有什么区别?
sleep()和wait()方法之间有什么区别?
作者: mono    时间: 2015-5-7 11:02
从执行权和锁上来分析:
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。
sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。
wait:线程会释放执行权,而且线程会释放锁。
Sleep:线程会释放执行权,但不是不释放锁。
作者: 310415798    时间: 2015-5-7 11:05
mono 发表于 2015-5-7 11:02
从执行权和锁上来分析:
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyA ...

但不是不释放锁是什么意思?
作者: 逍遥才子121    时间: 2015-5-7 11:10
wait原地不动,等被叫了再开始跑,sleep晕倒在地,等被救了再跑
作者: 310415798    时间: 2015-5-7 11:17
逍遥才子121 发表于 2015-5-7 11:10
wait原地不动,等被叫了再开始跑,sleep晕倒在地,等被救了再跑

好强大的解释,多谢了
作者: bztf    时间: 2015-5-7 13:26
sleep释放资源。wait不释放资源这是最重要的点。我面试的时候问到过
作者: 想要那片海    时间: 2015-5-7 13:46
sleep设置了休眠时间(可以这么叫吧)以后,就开始释放资源,过了这个设定时间又开始自动抢占资源,但是wait需要人为的设置唤醒
作者: aaronwang    时间: 2015-5-7 20:52
抄来一段,你看看:
sleep和wait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用

  其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题。在java.lang.Thread类中,提供了sleep(),而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程。
  sleep()可以将一个线程睡眠,参数可以指定一个时间。而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
    wait有两种形式wait()和wait(milliseconds).
   synchronized(x){
      x.notify()
     //或者wait()
   }
作者: 彭越    时间: 2015-5-7 21:01
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。
sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。
wait:线程会释放执行权,而且线程会释放锁。
Sleep:线程会释放执行权,但不是不释放锁。
作者: !85684009ex    时间: 2015-5-10 09:43
区别不打!sleep是停止之后放弃线程!wait是直接停止!停止的时间好像可以设定!
作者: bboyXiaoNuo    时间: 2015-5-10 09:46
sleep在消耗了你指定时间后(毫秒),会自动唤醒,而wait必须notify唤醒
作者: 知来者之可追    时间: 2015-5-10 15:34
学习学习
作者: 大西洋    时间: 2015-5-10 18:08
sleep()可以设定时间,让线程自己醒过来~

wait() 定住之后,需要别人notify()唤醒才能醒过来。
作者: an_lucas    时间: 2015-5-10 18:48
学习了~~~~




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