Java多线程:如何使用Runnable接口创建线程?

时间:2016-01-22 16:41:48

标签: java multithreading runnable

有人可以解释这段代码的作用吗? new Thread(new X()).start();

其余代码:

class X implements Runnable {
    X() {}
    }
    public static void main(String[] arg) {
        new Thread(new X()).start();
    }
}

4 个答案:

答案 0 :(得分:6)

这是一个非常简单的示例,它显示了如何创建新线程并运行它。当您在Java中创建新线程时,您可以为它们提供一些操作 - “Runnable”。

class X implements Runnable

此界面只有一个方法 - run()。所以你创建了一个新的线程,在其'构造函数中有一个runnable。

new Thread(new X())

创建新线程后,必须使用 start()方法启动它。这是它调用runnable的 run()方法。在您的示例中,在构造线程之后,它已被链接:

new Thread(new X()).start();

现在,这个例子很不寻常,因为类X实际上并没有实现 run 方法。但通常情况下,这是额外的一点,所以你的例子看起来像这样:

class X implements Runnable {
    public void run() {
        System.out.println("This is running on a different thread!");
    }

    public static void main(String[] arg) {
        new Thread(new X()).start();
    }
}

答案 1 :(得分:0)

首先,如果构造函数为空,则无需定义构造函数。如果您没有定义,它将自动为空白。其次,你可以简单地做一个匿名的类定义,我将在一秒钟内解释。在这种情况下,该方法不是主要的,它是运行的。您也可以使用匿名类定义定义线程对象。

onPostExecute

匿名类定义允许您定义和实例化一个类,该类同时扩展/实现另一个类,而不实际创建类。另外,请注意X.main()是静态的,这意味着X的任何实例都不具有该方法。您想要覆盖运行和调用开始。 Start只是一个调用在不同线程中运行的方法。请注意,您无法启动线程两次。

答案 2 :(得分:0)

每个线程对象都有一个方法run()。如果你调用线程对象的start()方法,那么它将执行run()。

唯一的区别是它将单独/平行执行,并且不会在现有的操作顺序中。

答案 3 :(得分:0)

您可以通过两种方式创建线程:一种是通过扩展Thread而另一种是通过实现Runnable接口来创建。

如果不扩展Thread类,则不会将类对象视为线程对象。所以你必须显式创建Thread类对象。

Thread类将Runnable类作为构造函数中的参数。

您正在将class X的实现Runnable的对象传递给Thread构造函数,以便从run执行您的类start()方法}()方法的线程。

您可以通过两种不同的方式创建线程。查看有关thread creation

的oracle文档
  

创建Thread实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:

  1. Provide a Runnable object. Runnable接口定义了一个运行的方法,用于包含线程中执行的代码。 The Runnable object is passed to the Thread constructor

    public class HelloRunnable implements Runnable {
    
        public void run() {
            System.out.println("Hello from a thread!");
        }
    
        public static void main(String args[]) {
            (new Thread(new HelloRunnable())).start();
        }
    }
    
  2. Subclass Thread。 Thread类本身实现了Runnable,尽管它的run方法什么都不做。应用程序可以子类Thread,提供自己的run

    实现
    public class HelloThread extends Thread {
    
        public void run() {
            System.out.println("Hello from a thread!");
        }
    
        public static void main(String args[]) {
            (new HelloThread()).start();
        }
    
    }