2017-08-10 226 views
0

我想在執行new Thread的行時開始一個新的線程。我這樣做:「新線程」不啓動新線程?

new Thread (new Runnable() { 

@Override 
    public void run() { 

      ..... 
    } 
}).start(); 

//other code continues here 

當代碼來到新的線程行它跳轉到執行其他代碼。爲什麼?

+0

它稍後將在'run()'內執行代碼。 – azizbekian

+0

因爲您可能正在調試啓動新線程的線程。如果你在'run()'方法中放置了一個logline或者一個斷點,你會發現它被執行了 – 0xDEADC0DE

+0

@ 0xDEADCODE我在run方法的第一行代碼中放置了一個斷點......當我調試它時仍然轉到其他代碼行。 – Zobi

回答

2

那麼因爲新的線程幾乎立即開始運行,並且新的線程聲明之後的代碼正在被相同的前一個線程執行。

這是發生了什麼:

// Main thread running 

// Some random code... 

new Thread (new Runnable() { 
@Override 
public void run() { 
    // This code will run in another thread. Usually as soon as start() gets called! 
} 
}).start(); 

// This code is still being executed by the main thread. 

除了安裝調試器,一個簡單的方法來檢查線程是否真正開始運行的方法是把Log語句中run()

+0

如何檢查在與主線程「並行」的另一個線程中運行的執行代碼?我在run()的第一行代碼中放了一個斷點,但它沒有執行。 – Zobi

+0

你什麼時候放置斷點?之前運行您的應用程序或之後? –

+0

@Zobi做了一件事,在run()方法中加入一個日誌並檢查它是否正在執行 –

0

簡單:因爲正是你想要發生!

您創建新()一個新的線程,因爲你馬上撥打的start()那個對象上,該作業開始做工作。

而您的主線程繼續其「主要」工作。它就像:你拍拍你的朋友在他的肩膀上(發信號給他:開始跑步) - 現在你問:「他爲什麼離開了?」

這就是這一切!

+0

那麼我如何檢查run方法內部執行的代碼呢? – Zobi

+1

這取決於這個代碼在做什麼!直到你澄清代碼應該做什麼 - 以及你觀察到的是什麼,我們都無法幫助你。 – GhostCat

+0

我想從Android應用程序登錄比找到安裝在服務器上的文件,並下載它 – Zobi