黑马程序员技术交流社区
标题:
继承Thread同时实现Runnable会怎样执行代码
[打印本页]
作者:
刘士林
时间:
2012-11-1 21:11
标题:
继承Thread同时实现Runnable会怎样执行代码
若继承了Thread类又实现了Runnable接口,那么重写的run方法是谁的呢?
因为Runnable接口不能给线程对象起名字,所以继承了Thread,才会出现这种情况。
public class wenwen {
public static void main(String[] args)
{
Test t = new Test("t线程");
Thread tt=new Thread(t);
t.start();
tt.start();
}
}
class Test extends Thread implements Runnable
{ Test(String name)
{
super(name);
}
public void run()
{
System.out.println("执行谁的run");
System.out.println(currentThread().getName());
}
}
运行结果如下:
执行谁的run
t线程
执行谁的run
Thread-0
两种创建线程的方式都执行,run方法到底属于谁的?
作者:
杨卫腾
时间:
2012-11-1 21:22
我认为是这样的:
这其实也是两个线程了,两个线程都打开,同时工作了。
使用的是同一个 run() 方法。
t.start()执行的是继承Thread类的接口开始工作了。
tt.start():表示的是实现了Runnable接口的线程打开了。
作者:
李建强
时间:
2012-11-1 21:37
首先你要知道,
Thread也是实现的Runnable接口,
看API,public class Threadextends Objectimplements Runnable
相当于你实现了两次Runnable接口。
Thread类也是实现的Runnable接口的run方法。
作者:
樊鹏飞
时间:
2012-11-1 21:52
其实根本没有必要继承Thread的同时实现Runnable 这是线程的两种实现方式 不过感觉还是实现Runnable接口来的比较强大
作者:
黑马-李勇
时间:
2012-11-1 22:02
毕老师不是说一种是extends Thread
一种是implements Runnable
两种方式吗?为什么既继承又实现啊?
作者:
slience
时间:
2012-11-1 23:16
test类既继承了方法又实现了接口,所以其中的run()既覆盖了父类中的run()又实现了接口中的run();其实这就是两种线程定义方法的结合和一种方式的定义没有什么区别,他们这两个线程一样是对cpu争夺资源(可能会产生死锁的现象我想需要同步一下),谁抢到了就执行谁。所以run()方法不存在属于谁之说
作者:
林志进
时间:
2012-11-1 23:18
其实Runnable作为一个接口,只有run一个定义的方法。如果只是单纯的实现接口(implements)而且只是重写run的话,当然啊就没有getName方法了。而Thread类本来就是实现Runnable的,但是同时加了很多别的功能函数。
如: String getName() 返回该线程的名称。 再如静态函数:static Thread currentThread() 返回对当前正在执行的线程对象的引用。
public static void main(String[] args) throws InterruptedException {
Test t = new Test("t线程");// 在这里Test是作为一个Thread的子类,它已经实现了getName的方法。
Thread tt = new Thread(new Test("t线"));// 而这里你传递进来的参数只是一个runnable的子类,只是将run的方法体给传递进来,于name无关
tt.setName("ddd");// 当然你也可以通过该方法来为线程赋名字
t.start();
Thread.sleep(1000);
tt.start();
作者:
梁胜海
时间:
2012-11-2 01:05
一句话,多此一举,不过能创新疑问是好的,但是要多思考思考符合逻辑不。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2