黑马程序员技术交流社区
标题:
分享一个之前面试的题目。
[打印本页]
作者:
huangqili
时间:
2014-7-12 11:25
标题:
分享一个之前面试的题目。
本帖最后由 huangqili 于 2014-7-12 11:26 编辑
解释Runnable接口与Thread类的区别。大家都知道,Runnable接口与Thread类都是用来
创建线程
类的,它们都需要实现run()方法,似乎没什么区别。
其实,它们还是有区别的,请看以下。
首先大家都应该知道,JAVA的类
不允许多继承
的,也就是只能继承自一个类。
那么,如果线程类继承了Thread以后,它就不能再继承其他的类了。
而Runnable接口,就不会有这样的问题,因为类是可以
实现多个接口
的。
另外,Thread提供了很多关于线程的方法,例如,
获取线程id
、
线程名
、
线程状态
等方法。
对于比较复杂一点的线程,可能就需要run()方法中调用这些方法,而Runnable接口使用起来就没有那么方便了。
如果让一个线程类实现Runnable接口,那么当调用这个线程的对象开辟多个线程时,
可以让这些线程
调用同一个变量
;若这个线程是由继承Thread类而来,那么就会麻烦一些,
则要通过
内部类
来实现上述功能,利用的就是
内部类可以任意访问外部变量
这一特性。
我举个例子:
class MyThread implements Runnable { //实现Runnable接口
int index = 0; //index变量
public void run() {
...............
}
}
class MyThread {
int index = 0;
private class InnerClass extends Thread { //定义一个内部类,继承Thread
public void run() {
.............
}
}
Thread getThread() {
return new InnerClass(); //这个函数的作用是返回InnerClass的一个匿名对象
}
}
复制代码
class MyThread implements Runnable { //实现Runnable接口
复制代码
总结:
(1)、线程类继承自Thread则不能继承自其他类,而Runnable接口可以。
(2)、线程类继承自Thread相对于Runnable来说,使用线程的方法更方便一些。
(3)
、实现Runnable接口的线程类的多个线程,可以更方便的访问同一个变量,而Thread类则需要内部类来进行替代。
作者:
jwx555
时间:
2014-7-12 11:56
通过你的代码
你说的概念我一个都没理解到:(
作者:
帮帮
时间:
2014-7-12 12:23
学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2