Java 创建线程时,我们在构造函数中传递的参数包含(这)为什么使用它?

Java 创建线程时,我们在构造函数中传递的参数包含(这)为什么使用它?,java,multithreading,Java,Multithreading,我是编程新手。创建线程时,为什么要将(此)作为参数传递 private Thread filePuller=null; filePuller=新螺纹(此“filePuller”); 查看类实现的接口。 它应该可以运行。 所以您将这个(引用类的对象)作为“任务”传递给线程以执行。 您的类重写方法 public void run(){ ... } 这将被执行。这里发生的事情是显式地实例化线程类,并将当前类的实例传递给新线程。有关详细信息,请参阅以获取有关该构造函数的详细信息。您当前的对象是的实例

我是编程新手。创建线程时,为什么要将(此)作为参数传递

private Thread filePuller=null;
filePuller=新螺纹(此“filePuller”);

查看类实现的接口。 它应该可以运行。 所以您将这个(引用类的对象)作为“任务”传递给线程以执行。 您的类重写方法

public  void run(){
...
}

这将被执行。

这里发生的事情是显式地实例化
线程
类,并将当前类的实例传递给新线程。有关详细信息,请参阅以获取有关该构造函数的详细信息。您当前的对象是的实例(您应该能够通过签出类开始的代码来检查)。因此,在代码的后面,当调用
filePuller.start()
时,它将调用当前类的
run()
方法。您应该能够在当前类中的某个地方看到
run()
方法的实现,无论是在同一文件中还是在超类的代码中。希望有帮助。

这是一个设计选择。
Thread
类带有许多重载构造函数。 在这里你可以使用这个:

公共线程(可运行目标,字符串名称)

分配一个新的线程对象。此构造函数与 线程(空、目标、名称)

参数:

target
–此线程运行时调用其run方法的对象 起动。如果为null,则调用此线程的run方法

name
–新线程的名称

因此,代码中的
this
引用了一个
Runnable
实例,线程启动时会调用该实例的
run()
方法


如果类实现了
Runnable
,并且出于某种原因不想扩展
Thread
,例如该类已经扩展了另一个类,或者我们不想在类定义中泄漏
Thread
实现,则此代码是有意义的。

我们需要查看代码。一开始它看起来像一个反模式。
这个
指的是您当前所在的对象,如果我猜它实现了
可运行
接口,这是
线程
@markspace的第一个参数为什么是反模式?实现
Runnable
通常是好的,并且通常是比扩展
Thread