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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王运科 中级黑马   /  2012-3-30 21:33  /  1810 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在线程中,sleep() 和 wait() 有什么区别?

4 个回复

倒序浏览
  sleep()方法是使线程停止一段时间的方法,在sleep的时间间隔期满后,线程不一定立即恢复执行。这是因为在个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非“醒来”的线程具有更搞优先级正在运行的线程因为其他原因阻塞。
wait() 是线程交互时,如果线程对一个同步对象X发出一个wait() 调用,该线程会暂停执行,被调用对象进入等待的状态,知道唤醒或等待时间到。
回复 使用道具 举报
一、sleep用于线程任何地方,而wait用于线程同步中
二、都有暂停线程执行的作用,但是sleep不会释放锁,wait要释放锁。
回复 使用道具 举报
在线程中1,sleep()必须指定时间,wait()可以指定时间也可以不指定
2,wait方法必须定义在同步中,sleep不一定。
3,在同步中的wait() sleep()的对于执行权和锁的处理不同:sleep释放了执行权,但是不释放锁;wait()释放执行权,释放锁。
回复 使用道具 举报
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,
但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,
只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马