线程类不包含以Object类为参数的构造函数

时间:2019-06-13 08:23:05

标签: java

Thread类不包含将Object类型作为参数的构造函数,因此它在多线程处理中如何调用构造函数。 下面是我需要解释的代码。

Thread t = new Thread(myThread); //How this line execute.

class MyThread implements Runnable  
{  
    @Override  
    public void run()
    {    
        for(int i = 0; i < 1000; i++)
        {
            System.out.println(i+" * "+(i+1)+" = " + i * (i+1));
        }
    }
}

public class ThreadsInJava
{
    //Main Thread
    public static void main(String[] args)
    {
        MyThread myThread = new MyThread();  

        Thread t = new Thread(myThread);     

        t.start();                          
    }
}

3 个答案:

答案 0 :(得分:4)

Thread构造函数将Runnable作为参数。您的类implementsRunnable,因此可以将其提供给构造函数,因为该类是实现后的Runnable

答案 1 :(得分:3)

您的类MyThread实现了 Runnable 接口。

该线程constructor接受任何实现Runnable的东西。如果您删除该子句implements Runnable(连同@Override注释一起使用),它将不再起作用!

这就是全部!

有关更多的见解,我建议阅读What does it mean to program against an interface

答案 2 :(得分:1)

我不清楚您的困惑在哪里,但是there exists是一个Thread的构造函数,它需要一个Runnable。您的MyThread类实现了Runnable,因此可以将其作为Runnable参数来传递。

顺便说一句,您不必编写实现Runnable的整个类。由于Runnable functional interface ,因此可以使用lambda表达式:

new Thread(() -> {
    for (int i = 0; i < 1000; i++) {
        System.out.println(i + " * " + (i + 1) + " = " + i * (i + 1));
    }
}).start();