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

时间:2014-04-09 19:11:46

标签: java multithreading

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

我的困惑是:

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

2 个答案:

答案 0 :(得分:4)

来自javadoc of Runnable

  

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

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

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

Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();

来自Thread.start()的javadoc:

  

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

答案 1 :(得分:2)

您可以在Thread javadoc中找到相关信息。它描述了运行线程的两种方式。 Runnable部分告诉:

  

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

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