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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Changer_s 于 2013-5-28 19:35 编辑

线程中wait()是在Object类中,已经抛了异常
然后毕向东老师说:我们在使用wait()的时候,只能用try???
这是为什么呀?我表示很不理解的(估计是以前语文基础没打好,文字游戏看不懂!!!)

还有wait(),notity()为什么要定义在Object类中?(不太理解毕向东老师的解释)
希望理解的人说通俗,容易一点,先谢了!!!

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
袁梦希 + 1 + 3 很给力!

查看全部评分

5 个回复

倒序浏览
如果实现run()方法时,使用wait()方法 不能抛出  因为run()方法没有抛出异常,子类同样也不可以。如果抛出就不是覆盖run()方法了。而这么做的话Java编译也不会通过,因为你定义的还不是普通的类,因为有实现Runnable接口。
至于wait,notify为什么定义在Object类中:这是一个设计概念 你写的所有类都是从object继承的子类  自然也就自动具备那些方法,

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 Changer_s 于 2013-5-28 09:31 编辑
刘兆华 发表于 2013-5-28 02:05
如果实现run()方法时,使用wait()方法 不能抛出  因为run()方法没有抛出异常,子类同样也不可以。如果抛出就 ...

在Object类中的wait()方法:
wait
public final void wait(long timeout,
                       int nanos)
                throws InterruptedException在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待

这是api源代码,里面已经抛了异常呀?为什么不能throws来抛异常?或者说还要抛异常?
回复 使用道具 举报
刘兆华 发表于 2013-5-28 02:05
如果实现run()方法时,使用wait()方法 不能抛出  因为run()方法没有抛出异常,子类同样也不可以。如果抛出就 ...

给你补充下,为什么wait要定义在Object类中。个人想法,因为只要程序跑起来就有一个主线程,在主程序中都有可能需要用到线程的方法,比如让当前主线程等待下等等。所以不只是多线程,才可以等待啊 唤醒啊什么的。既然都要用到这个方法,所以设计放在最顶层,让大家默认都可以方便使用。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
袁梦希 + 1 很给力!
Changer_s + 1 说到点子上去了,再补充一下饿汉式呗.

查看全部评分

回复 使用道具 举报
顾玲玉 发表于 2013-5-28 08:59
给你补充下,为什么wait要定义在Object类中。个人想法,因为只要程序跑起来就有一个主线程,在主程序中都 ...

对于饿汉式,这个解释不错
那个懒汉式呢?再解释一下吧:handshake
回复 使用道具 举报
懒汉式 就是 延迟加载,需要的时候去创建对象,而不是系统加载的时间创建了对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马