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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hxwo211314 中级黑马   /  2014-7-9 14:03  /  1185 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

wait(), notify() ,notifyAll(),用来操作线程的方法为什么定义在了Object类中?       wait()   sleep() 有什么区别?


2 个回复

倒序浏览
这是一个设计概念 你写的所有类都来自object  自然也就自动具备那些方法。。。。。。。。。。。。。。                 wait()sleep()的区别:最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。而且他俩继承的类不同,sleep继承的是Thread类,wait继承的是Object类。他们的作用范围也不同。另外leep必须捕获异常,而wait不需要捕获异常
回复 使用道具 举报
wait()方法使线程释放了对象锁,使线程进入等待区,
notify() ,notifyAll()唤醒一个或多个在等待区的线程,使它们加入对象锁的争夺,
因为以上三个方法都涉及到了对对象锁的操作,所以都属于Object的方法,
而sleep()是线程上的方法,调用此方法会使线程暂停一段时间,但不释放对象锁.

综上所述,
wait()来自于Object类,sleep()来自于Thread类,
执行wait()方法会释放对象锁,而sleep()不会
wait(),notify(),notifyall()必须在synchronized方法或代码块中执行,而sleep()可以在任何地方使用
wait()方法不需要捕获异常,而sleep()方法必须捕获异常
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马