有关实现Runnable的问题
可能重复:
Java:“实现Runnable”与“扩展线程”
我有两个有关多线程编程的问题。 我在网上阅读了一些答案,但仍然找不到令人满意的答案。
实现Runnable比扩展线程类更受欢迎。 为什么?
我们如何能够忽略run()方法?
根据Herbert Schildt的“The Complete Reference to Java”,如果我们不覆盖除run()以外的任何Thread类的方法,最好是实现Runnable。
我的第二个问题可能听起来有点愚蠢,但我似乎错过了一些东西,我不确定整个事情是如何工作的。
1:实现Runnable比扩展线程类更受欢迎。 为什么?
因为它允许你的类如果想要扩展另一个类而不是被迫扩展Thread 。
2:我们如何能够摆脱run()方法?
你当然可以重写其他方法,但是当线程启动时, Thread对象会调用run()方法。 这就是它的工作原理。 默认的Thread.run()方法是:
public void run() {
if (target != null) {
target.run();
}
}
如果使用Runnable调用Thread构造函数,那么这就是target设置的target 。 如果您改为扩展Thread和@Override run()方法,那么这是在线程对象启动时将被调用的方法。
这就是Thread类的工作原理。
2:我们如何能够摆脱run()方法?
您可能在这里有错误,而是问为什么我们只需要在Runnable()实现run()方法。
Runnable是一个必须实现的单个run()方法的接口。 Thread是您正在扩展的具体类。 您可以重写具体类中的任何方法,除非该类是final或方法是final 。 确保你使用正确的Java术语,不查询股价implement和override 。
在深入研究之前需要三个基础。
extend一个类。 implement任意数量的接口。 extend任意数量的接口。 另外, abstract类是一个类。 因此,它的行为就像一个类,你不能implement它。 你只能extend它。
如果您扩展Thread,而实现Runnable时没有获得这些陷阱,则会出现一些陷阱。
public static String getName() {
return "My Test Application";
}
public static void stop() {
System.out.println("Shutting down");
}
public static void main(String... args) {
new Thread() {
@Override
public void run() {
System.out.println(getName());
stop();
}
}.run();
System.out.println("Bye now.");
}
版画
Thread-0
Bye now.
看看你能发现多少错误。
链接地址: http://www.djcxy.com/p/92071.html