我在Java教科书中找到了以下摘录:
"I've seen examples that don't use a separate
Runnable Implementation, but Instead Just make a
subclass of Thread and override the Thread's runO
method. That way,you call the Thread's no-arg
constructor when you make the new thread;
Thread t = new Thread(); //no Runnable"
最后一行不应该是
Thread t = new <Some class that extends Thread class and over rides its run method>();
我说错了吗?
有人可以提供说明上述摘录的示例代码吗?
答案 0 :(得分:1)
你是对的。
如果您创建Thread
的实例而不覆盖提供run()
的{{1}},则该线程将执行默认的空Runnable
方法。
我想知道这个引用是否准确,因为它特别提到了子类的Thread,但代码run()
显然没有。
答案 1 :(得分:1)
基本上你在谈论运行时多态性。是的,你可以做到这一点。见以下例子:
class Flight extends Thread {
public void run() {
System.out.println("Hello World.. I took off");
}
}
public static void main(String[] args) {
Flight flight = new Flight();
Thread myflight = new Flight();//See how i used runtime polymorphism.
flight.start();
myflight.start();
}
答案 2 :(得分:1)
您可以使用匿名子类覆盖run
方法“inline”:
new Thread() {
public void run() {
doStuffInPaarralel();
}
}.start();
并不是说提供单独的Runnable
类有很多优点。你真的需要一个线程,只做一件事而死,这有点浪费。更好的方法是使用一个ThreadPool
,它有一堆线程,可以在需要时执行任何任务。这样,您每次都可以减少启动和销毁线程的开销。