黑马程序员技术交流社区

标题: 【黑马云青年】线程中wait()是在Object类中,已经抛了异常 [打印本页]

作者: Changer_s    时间: 2013-5-28 00:25
标题: 【黑马云青年】线程中wait()是在Object类中,已经抛了异常
本帖最后由 Changer_s 于 2013-5-28 19:35 编辑

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

还有wait(),notity()为什么要定义在Object类中?(不太理解毕向东老师的解释)
希望理解的人说通俗,容易一点,先谢了!!!
作者: 刘兆华    时间: 2013-5-28 02:05
如果实现run()方法时,使用wait()方法 不能抛出  因为run()方法没有抛出异常,子类同样也不可以。如果抛出就不是覆盖run()方法了。而这么做的话Java编译也不会通过,因为你定义的还不是普通的类,因为有实现Runnable接口。
至于wait,notify为什么定义在Object类中:这是一个设计概念 你写的所有类都是从object继承的子类  自然也就自动具备那些方法,
作者: Changer_s    时间: 2013-5-28 08:33
本帖最后由 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 08:59
刘兆华 发表于 2013-5-28 02:05
如果实现run()方法时,使用wait()方法 不能抛出  因为run()方法没有抛出异常,子类同样也不可以。如果抛出就 ...

给你补充下,为什么wait要定义在Object类中。个人想法,因为只要程序跑起来就有一个主线程,在主程序中都有可能需要用到线程的方法,比如让当前主线程等待下等等。所以不只是多线程,才可以等待啊 唤醒啊什么的。既然都要用到这个方法,所以设计放在最顶层,让大家默认都可以方便使用。
作者: Changer_s    时间: 2013-5-28 09:26
顾玲玉 发表于 2013-5-28 08:59
给你补充下,为什么wait要定义在Object类中。个人想法,因为只要程序跑起来就有一个主线程,在主程序中都 ...

对于饿汉式,这个解释不错
那个懒汉式呢?再解释一下吧:handshake
作者: ZhaoYuBetter    时间: 2013-5-28 14:10
懒汉式 就是 延迟加载,需要的时候去创建对象,而不是系统加载的时间创建了对象




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