有关实现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