在Java Thread trail中围绕“new”的括号?

时间:2012-05-01 01:18:45

标签: java syntax

我在线程中启动了一些Java编码,并在Oracle的教程部分遇到了一行我不明白的代码,我希望有人可以为我澄清它为什么会起作用:

(new Thread(new HelloRunnable())).start();

在这一行中,声明了一个新线程,但没有直接应用于某个对象,然后立即调用start方法来运行该线程。这是如何运作的?为什么新的  这个关键词中的关键词是什么?我很想对这里发生的事情做一些澄清,谢谢。完整的来源是: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

5 个答案:

答案 0 :(得分:2)

Thread实例周围的括号不是必需的。以下也适用

new Thread(new HelloRunnable()).start();

如果展开语句,则相当于此代码

Runnable myrunnable = new HelloRunnable();
Thread mythread = new Thread(myrunnable);
mythread.start();

本教程简明扼要。

答案 1 :(得分:1)

这一行相当于:

// I have put it in block, as you don't have a reference to any of those objects afterwards
{
    // instantiate a runnable
    HelloRunnable runnable = new HelloRunnable(); 
    // instantiate a thread object that will use this runnable
    Thread thread = new Thread(runnable); 
    // start the thread (call the run method of the runnable on a new thread)
    thread.start(); 
}

答案 2 :(得分:0)

这是有效的,因为它是一个有效的陈述。它在Thread对象上运行start()方法。 Thread对象被创建为一个对象,而不仅仅是声明为引用变量。

答案 3 :(得分:0)

您需要一个实现Runnable的对象实例传递给Thread构造函数;电话new HelloRunnable()给你了。

你需要一个Thread对象来运行;致new Thread()的电话给你。

您在新start()个实例上致电Thread;它会调用您为其构造函数提供的run()实例上的Runnable方法。

答案 4 :(得分:0)

  1. 创建一个新的Thread对象,并在其上调用start
  2. 为什么不呢?创建对象是将其存储在变量中的单独操作。看看你如何创建HelloRunnable:你正在做同样的事情。