有人可以解释这段代码的作用吗? new Thread(new X()).start();
其余代码:
class X implements Runnable {
X() {}
}
public static void main(String[] arg) {
new Thread(new X()).start();
}
}
答案 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实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
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();
}
}
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();
}
}