3

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

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

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

4

5 回答 5

3

Thread 实例周围的括号不是必需的。以下将同样有效

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

如果展开语句,就相当于这段代码

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

教程很简洁。

于 2012-05-01T01:40:57.650 回答
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(); 
}
于 2012-05-01T01:37:29.200 回答
0

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

于 2012-05-01T01:25:40.143 回答
0

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

您需要一个 Thread 对象才能运行;调用new Thread()给你。

你调用start()那个新Thread实例;它调用您提供给其构造函数run()的实例上的方法。Runnable

于 2012-05-01T01:25:40.480 回答
0
  1. 创建一个新Thread对象并start在其上调用。
  2. 为什么不呢?创建对象是与将对象存储在变量中不同的操作。看看你是如何创造HelloRunnable的:你在做同样的事情。
于 2012-05-01T01:26:10.340 回答