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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

sleep()和wait()方法之间有什么区别?

13 个回复

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

评分

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

查看全部评分

回复 使用道具 举报 1 0
mono 发表于 2015-5-7 11:02
从执行权和锁上来分析:
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyA ...

但不是不释放锁是什么意思?
回复 使用道具 举报
wait原地不动,等被叫了再开始跑,sleep晕倒在地,等被救了再跑
回复 使用道具 举报
逍遥才子121 发表于 2015-5-7 11:10
wait原地不动,等被叫了再开始跑,sleep晕倒在地,等被救了再跑

好强大的解释,多谢了
回复 使用道具 举报
sleep释放资源。wait不释放资源这是最重要的点。我面试的时候问到过
回复 使用道具 举报
sleep设置了休眠时间(可以这么叫吧)以后,就开始释放资源,过了这个设定时间又开始自动抢占资源,但是wait需要人为的设置唤醒
回复 使用道具 举报
抄来一段,你看看:
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()
   }
回复 使用道具 举报
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。
sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。
wait:线程会释放执行权,而且线程会释放锁。
Sleep:线程会释放执行权,但不是不释放锁。
回复 使用道具 举报
区别不打!sleep是停止之后放弃线程!wait是直接停止!停止的时间好像可以设定!
回复 使用道具 举报
sleep在消耗了你指定时间后(毫秒),会自动唤醒,而wait必须notify唤醒
回复 使用道具 举报
学习学习
回复 使用道具 举报
sleep()可以设定时间,让线程自己醒过来~

wait() 定住之后,需要别人notify()唤醒才能醒过来。
回复 使用道具 举报
学习了~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马