我想在執行new Thread
的行時開始一個新的線程。我這樣做:「新線程」不啓動新線程?
new Thread (new Runnable() {
@Override
public void run() {
.....
}
}).start();
//other code continues here
當代碼來到新的線程行它跳轉到執行其他代碼。爲什麼?
我想在執行new Thread
的行時開始一個新的線程。我這樣做:「新線程」不啓動新線程?
new Thread (new Runnable() {
@Override
public void run() {
.....
}
}).start();
//other code continues here
當代碼來到新的線程行它跳轉到執行其他代碼。爲什麼?
那麼因爲新的線程幾乎立即開始運行,並且新的線程聲明之後的代碼正在被相同的前一個線程執行。
這是發生了什麼:
// 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()
如何檢查在與主線程「並行」的另一個線程中運行的執行代碼?我在run()的第一行代碼中放了一個斷點,但它沒有執行。 – Zobi
你什麼時候放置斷點?之前運行您的應用程序或之後? –
@Zobi做了一件事,在run()方法中加入一個日誌並檢查它是否正在執行 –
它稍後將在'run()'內執行代碼。 – azizbekian
因爲您可能正在調試啓動新線程的線程。如果你在'run()'方法中放置了一個logline或者一個斷點,你會發現它被執行了 – 0xDEADC0DE
@ 0xDEADCODE我在run方法的第一行代碼中放置了一個斷點......當我調試它時仍然轉到其他代碼行。 – Zobi