2012-05-01 68 views
2

我開始在線程一些Java編碼和跨Oracle的教程部分的代碼行我不明白來了,我在這裏希望有人能澄清我爲什麼它的工作原理:圍繞Java中的「新」Thread Thread的括號?

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

在這行聲明一個新的線程,但不直接應用於一個對象,然後立即調用start方法來運行該線程。這個怎麼用?爲什麼新的 關鍵字可以在這個假設下工作?我很想澄清一下這裏發生的事情,謝謝。完整的來源是: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

+0

感謝您的評論,我想知道的一個具體的事情是在新的之前使用左括號的語法目的是什麼?是否要指示解釋器,我們沒有將新對象應用於變量? – TheEllo

+1

括號不起任何作用。刪除它們並重新編譯,並生成完全相同的代碼。 – erickson

+0

是的。他們只是爲了便於閱讀。 – Victor

回答

0

這是可行的,因爲這是一個有效的陳述。它在Thread對象上運行start()方法。線程對象被創建爲一個對象,而不僅僅是聲明爲一個引用變量。

0

您需要實現Runnable傳遞給線程構造函數的對象實例;電話new HelloRunnable()給你。

您需要一個Thread對象才能運行;撥打new Thread()給你。

您在該新的Thread實例上致電start();它會調用Runnable實例中run()方法給你的構造函數。

0
  1. 將創建一個新的Thread對象,並調用start
  2. 爲什麼不呢?創建對象是將其存儲在變量中的單獨操作。看看你如何創建HelloRunnable:你在做同樣的事情。
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

圍繞主題實例中的括號內是沒有必要的。如果展開的語句下面將工作一樣好

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

,這相當於該代碼

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

本教程更加簡潔。