黑马程序员技术交流社区

标题: 线程Thread和接口Interface有什么区别呢? [打印本页]

作者: 欧阳才志    时间: 2012-4-26 07:57
标题: 线程Thread和接口Interface有什么区别呢?
学了接口也学了一半进程,怎么感觉两个东西就是一个东西啊。哈哈!
接口是需要继承实现方法后再运行,线程只是少了一个实现环节,直接可以调用从Thread里继承来的方法。但是两个都是继承方法,然后用父类方法实现功能,咋感觉是一样的呢?
有点搅,请明白人指教!
作者: 王敏NO.09    时间: 2012-4-26 08:35
接口,初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
Thread类用于描述线程,该类就定义一个功能,用于存储线程要运行的代码,该存储功能就是run方法。


作者: 岳伟伟    时间: 2012-4-26 09:12
定义一个Thread类的子类,假如名字就St,St会继承Thread类中的方法,也可以自定义方法,这和接口是类似的。
作者: 岳伟伟    时间: 2012-4-26 09:22
晕啊,哈哈。
定义一个Thread类的子类,假如名字就St,St会继承Thread类中的方法,也可以自定义方法,这和接口是类似的。
可是要用St里面的方法,就必须创建子类St的对象,并且调用start()方法启动线程,St中run()方法内的代码势必会运行,如果run()方法内的代码运行完毕,线程就消亡了,定义的其他非静态方法也就没法运行了!对象都没了不是吗? 也可以在run()方法内调用这些自定义的方法,但是这些方法在新建的线程启动以后,是一定会无选择地运行的!不管你乐不乐意。
定义一个类实现一个接口,实现接口中的方法,这些方法是可以选择使用的。
线程的作用不在继承方法,在于重写run()方法,同时操作共享数据(公共资源:同时卖同一天的票、同时用一台打印机、同时上一个厕所...),但彼此应该是同步的,有人用打印机了,咱就先等等,有人去第九期了,咱就等第十期吧!

作者: 林德燚    时间: 2012-4-26 12:54
学了接口也学了一半进程,怎么感觉两个东西就是一个东西啊。哈哈!
接口是需要继承实现方法后再运行,线程只是少了一个实现环节,直接可以调用从Thread里继承来的方法。但是两个都是继承方法,然后用父类方法实现功能,咋感觉是一样的呢?

Thread这是线程类,接口是一个特殊的抽象类,我不懂你这怎么会混淆,接口都是里抽象的方法,都需要实现的,Thread不需要,因为Thread是个普通的类。可以实例化;
Thread的一个构造函数里组合了一个Runnable接口,这不就不需要继承Thread了。这2根本就是2回事,还有你如果这混淆,那就不是Thread和接口的事了,比如:
clsss A extends Object{}
你是A和接口也混淆了吧;
应该你类和接口区别不清楚》
类》抽象类》接口,它们之间是有这个关系的。
接口唯一区别就是方法都没有方法体;就这么简单;

作者: 毕博    时间: 2012-4-26 13:07
查了一下 希望对你有帮助
Runnable接口只有一个方法,那就是run(   ),但是如果你想对它做一些Thread对象才能做的事情(比方说toString(   )里面的getName(   )),你就必须用Thread.currentThread(   )去获取其reference。Thread类有一个构造函数,可以拿Runnable和线程的名字作参数。

如果对象是Runnable的,那只说明它有run(   )方法。这并没有什么特别的,也就是说,不会因为它是Runnable的,就使它具备了线程的先天功能,这一点同Thread的派生类不同的。所以你必须像例程那样,用Runnable对象去创建线程。把Runnable对象传给Thread的构造函数,创建一个独立的Thread对象。接着再调用那个线程的start(   ),由它来进行初始化,然后线程的调度机制就能调用run(   )了。

Runnable   interface的好处在于,所有东西都属于同一个类;也就是说Runnable能让你创建基类和其它接口的mixin(混合类)。如果你要访问其它东西,直接用就是了,不用再一个一个地打交道。但是内部类也有这个功能,它也可以直接访问宿主类的成员。所以这个理由不足以说服我们放弃Thread的内部类而去使用Runnable的mixin。

Runnable的意思是,你要用代码——也就是run(   )方法——来描述一个处理过程,而不是创建一个表示这个处理过程的对象。在如何理解线程方面,一直存在着争议。这取决于,你是将线程看作是对象还是处理过程[68]。如果你认为它是一个处理过程,那么你就摆脱了 "万物皆对象 "的OO教条。但与此同时,如果你只想让这个处理过程掌管程序的某一部分,那你就没理由让整个类都成为Runnable的。

作者: 魏征    时间: 2012-4-26 14:09
Interface是一个特殊的类,Interface里面存在抽象方法,所以接口不可以实例化,要实现接口需要用implements,如何定义接口中的内容是根据需要而定的。
Thread非抽象的类,创建线程继承Thread类,那么Thread是父类,让子类去继承父类。Thread封装了很多方法,用于线程。
接口是创建一个特殊的类,而继承Thread是用于复写其run方法,调用其中的start()方法来实现线程。
如果说相同的话就是就是类实现接口和类继承Thread类,都是对其方法(无论方法或抽象方法)复写,来达到自己的需求。
至于实现接口和继承Thread是两个不同的操作,创建线程是为了实现多线程提高效率等,类实现接口是为了实现复写其中的方法,是让类具备某种得有方法(属性)。




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