如何在不使用Runnable实现的情况下运行线程?

时间:2014-12-16 12:29:17

标签: java multithreading

我在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>();

我说错了吗?

有人可以提供说明上述摘录的示例代码吗?

3 个答案:

答案 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,它有一堆线程,可以在需要时执行任何任务。这样,您每次都可以减少启动和销毁线程的开销。