繁体   English   中英

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

[英]Java Multithreading : how does thread creation with Runnable interface work?

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

其余代码:

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

这是一个非常简单的示例,显示了如何创建新线程并运行它。 在Java中创建新线程时,需要给它们做些事情-“可运行”。

class X implements Runnable

此接口只有一个方法-run() 因此,您将创建一个新线程,其构造函数中具有可运行的线程。

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();
    }
}

首先,不需要定义构造函数(如果为空)。 如果您未定义,它将自动为空白。 第二,您可以简单地做一个匿名类定义,我将在稍后解释。 在这种情况下,该方法不是主要方法,它可以运行。 您也可以使用匿名类定义来定义线程对象。

new Thread() {
    @Override
    public void run() {
        //Code here
    }
}.start();

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

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

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

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

如果您不扩展Thread类,则您的类对象将不被视为线程对象。 因此,您必须显式创建Thread类对象。

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

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

您可以通过两种不同的方式创建线程。 看看有关线程创建的 oracle文档

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

  1. Provide a Runnable object. Runnable接口定义了一个方法run,旨在包含在线程中执行的代码。 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(); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM