我在线程中启动了一些Java编码,并在Oracle的教程部分遇到了一行我不明白的代码,我希望有人可以为我澄清它为什么会起作用:
(new Thread(new HelloRunnable())).start();
在这一行中,声明了一个新线程,但没有直接应用于某个对象,然后立即调用start方法来运行该线程。这是如何运作的?为什么新的 这个关键词中的关键词是什么?我很想对这里发生的事情做一些澄清,谢谢。完整的来源是: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
答案 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)
Thread
对象,并在其上调用start
。HelloRunnable
:你正在做同样的事情。