Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的新运算符_Java_Multithreading_Oop_Object - Fatal编程技术网

java中的新运算符

java中的新运算符,java,multithreading,oop,object,Java,Multithreading,Oop,Object,当通过实现Runnable接口实例化线程以创建线程对象时,我们执行如下操作 public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunna

当通过实现Runnable接口实例化线程以创建线程对象时,我们执行如下操作

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}
参考:

问题来自
main()
方法中的行。我知道start()是类Thread的一个实例方法,这就是为什么我们使用点表示法(类Thread的新创建对象)

现在我的问题是关于这个线程对象的创建(由
newthread(newhellorunnable())
创建)。为什么我们要将HelloRunnable对象(即实现Runnable接口的run()的类)传递给构造函数if线程。Thread()构造函数需要HelloRunnable对象做什么?Thread()构造函数对HelloRunnable对象有什么用途

通常,Thread()构造函数的任务是创建Thread对象。那么,Thread()构造函数在创建类Thread的对象时在何处使用“实现run()的类的对象”


提前感谢。

必须使用“实现运行的类的对象”,这样才能运行一些东西

否则,线程中会运行什么代码


您不需要严格的可运行对象—替代方法是扩展Thread,并重写Thread的run方法。

要了解Java API中的构造函数是做什么的,请阅读javadoc(在任何好的IDE中,您只需将鼠标悬停在新的类实例创建表达式上即可查看javadoc的工具提示)。对于采用Runnable的线程构造函数,它:

分配一个新的线程对象。此构造函数与线程(null、target、gname)具有相同的效果,其中gname是新生成的名称。自动生成的名称的形式为“Thread-”+n,其中n是一个整数

参数

  • target—启动此线程时调用其run方法的对象。如果为null,则该类运行方法不执行任何操作

因此,Runnable对象提供了要调用的run方法。如果不传递这样一个对象,线程将不知道哪个类包含run方法(更不用说如何初始化该对象了)。

您是否查阅了
线程
文档@是的,我有。实际上,我的意思是要求构造函数的工作不是确保类具有要运行的内容。它的工作是为新创建/正在创建的对象的字段分配一些值(在构造函数调用中传递给它)。不是吗?在本例中,这些都是相同的东西-您传递的值是“要运行的东西”。将Runnable传递给线程比直接扩展线程更干净,因为我们没有改变线程行为——我们只是想说“在新线程中运行此代码”。我实际上的意思是,构造函数的任务不是确保类有要运行的东西。它的工作是为新创建/正在创建的对象的字段分配一些值(在构造函数调用中传递给它)。不是吗?我实际上是想问构造函数的任务不是确保类有运行的东西。它的工作是为新创建/正在创建的对象的字段分配一些值(在构造函数调用中传递给它)。不是吗?