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();
}
}
答案 0 :(得分:4)
Thread
构造函数将Runnable
作为参数。您的类implements
是Runnable
,因此可以将其提供给构造函数,因为该类是实现后的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();