Java 为什么用户编写的run方法()会启动一个新线程?

Java 为什么用户编写的run方法()会启动一个新线程?,java,multithreading,Java,Multithreading,我知道您可以通过实现Runnable接口或扩展thread类来启动线程。为了实现Runnable接口,我被告知,我只需使用run()方法创建一个类,在该方法中,我可以在线程中放入我想要运行的任何代码 我的困惑是: run()方法的主体只是特定于用户的应用程序代码。那么Java实际上是如何启动线程的呢?换句话说,实际启动线程的代码在哪里?我还没有看到Runnable接口(不知道在哪里可以找到它),但是因为它只是一个接口,所以它只能拥有静态变量和方法签名。不是吗?来自: 当使用实现接口Runnabl

我知道您可以通过实现
Runnable
接口或扩展
thread
类来启动线程。为了实现
Runnable
接口,我被告知,我只需使用
run()
方法创建一个类,在该方法中,我可以在线程中放入我想要运行的任何代码

我的困惑是:

run()
方法的主体只是特定于用户的应用程序代码。那么Java实际上是如何启动线程的呢?换句话说,实际启动线程的代码在哪里?我还没有看到
Runnable
接口(不知道在哪里可以找到它),但是因为它只是一个接口,所以它只能拥有静态变量和方法签名。不是吗?

来自:

当使用实现接口Runnable的对象创建 线程,启动线程会导致对象的run方法 在单独执行的线程中调用

Java创建一个新线程,该线程在启动
run()
方法时执行放入该方法的代码

您需要将runnable作为参数传递给线程的构造函数:

Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();
从以下文件的javadoc:

使该线程开始执行;Java虚拟机调用 此线程的run方法

从:

当使用实现接口Runnable的对象创建 线程,启动线程会导致对象的run方法 在单独执行的线程中调用

Java创建一个新线程,该线程在启动
run()
方法时执行放入该方法的代码

您需要将runnable作为参数传递给线程的构造函数:

Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();
从以下文件的javadoc:

使该线程开始执行;Java虚拟机调用 此线程的run方法


您可以在中找到信息。它描述了运行线程的两种方式。
Runnable
部分说明:

创建线程的另一种方法是声明一个实现可运行接口的类。然后该类实现run方法。然后可以分配类的实例,在创建线程时作为参数传递,然后启动。此其他样式中的相同示例如下所示:

class PrimeRun implements Runnable {
    long minPrime;
    PrimeRun(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
        . . .
    }
}
然后,以下代码将创建一个线程并启动它运行:

PrimeRun p = new PrimeRun(143);
new Thread(p).start();

您可以在中找到信息。它描述了运行线程的两种方式。
Runnable
部分说明:

创建线程的另一种方法是声明一个实现可运行接口的类。然后该类实现run方法。然后可以分配类的实例,在创建线程时作为参数传递,然后启动。此其他样式中的相同示例如下所示:

class PrimeRun implements Runnable {
    long minPrime;
    PrimeRun(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
        . . .
    }
}
然后,以下代码将创建一个线程并启动它运行:

PrimeRun p = new PrimeRun(143);
new Thread(p).start();

Runnable
传递给
线程
。请注意,
Runnable
实际上与线程没有本质上的关系,尽管提供此类的主要原因是为了线程。但您可以将其用于任何需要具有
run()
方法的对象的地方。我用它来处理我想在以后执行的操作排队的情况,而不需要创建新的线程来执行它们。在所有sane实现中,线程支持(例如创建)都是由底层操作系统提供的。操作系统管理I/O,因此它必须管理执行线程。将
Runnable
传递给
Thread
。请注意,
Runnable
实际上与线程没有本质上的关系,尽管提供此类的主要原因是为了线程。但您可以将其用于任何需要具有
run()
方法的对象的地方。我用它来处理我想在以后执行的操作排队的情况,而不需要创建新的线程来执行它们。在所有sane实现中,线程支持(例如创建)都是由底层操作系统提供的。操作系统管理I/O,因此它必须管理执行线程。