2013-07-25 133 views
1

我正在開發一個android應用程序,我想在特定的函數上執行不同的線程。現在,當這個線程運行時,我不希望創建另一個線程。所以基本上,我想要主線程檢查線程是否正在運行,如果是,我希望它繞過線程;如果不是,那麼我希望它創建一個線程並執行該功能。我該怎麼做呢?如何檢查線程是否正在運行?

+3

好了,你知道一點關於線程。 Thread接口提供了什麼?提示:參見'isAlive()'。 – andy256

+0

在線程中運行一段時間(true)循環。讓線程在某個同步對象的頂部等待。當你想要執行你的功能時,發出同步信號。不需要任何可疑的檢查。需要CPU週期的 –

+0

。如果線程完成,最好添加一個單獨的類來發送事件。與此同時,如果事件尚未發送,isBusyFlag將保持爲真。這需要較少的CPU週期。 – KarelG

回答

2

在這種情況下,我寧可建議使用Future。請將您的代碼作爲FutureTask。使用Future.isDone會告訴你Future是否完成。如果是的話,也會返回你的價值。

好的部分是,你可以使用相同的線程來執行多個代碼塊。

目前,如果你:

Runnable myRunnable; 
Thread t = new Thread(myRunnable); 

現在你應該:

Future<Void> future = new FutureTask<Void>(myRunnable); 
ExecutorService ex= Executors.newFixedThreadPool(1); 
ex.submit(future); 

future.isDone會給你你想要的。您可以繼續使用ex

+0

如果Future.isDone返回false,那麼在呼叫返回時,Future是否完成不了? –

+0

是的。文件證實了這一點。 – Jatin

+0

嗯..我非常懷疑這些'IsAlive'中的任何一個,'IsDone'調用會返回一些線程/任務的狀態,這些線程或任務可能在另一個核心上併發執行。在布爾值被重新調用的時候,它可能不再有效。 –

4

您可以檢查Thread.isAlive()方法。

它測試這個線程是否還活着。如果線程 已啓動並且尚未終止,則線程仍處於活動狀態。

+0

如果Thread.isAlive返回true,那麼線程在返回時仍處於活動狀態? –

+0

@MartinJames是 – TN888

+0

@ Ty221好的。我想知道Thread.isAlive調用是如何防止線程在檢查完狀態之後但在返回之前正常終止的? –

0

我已經使用這個,它的做工精細

if (thread.getState() == Thread.State.NEW) 
{ 
    thread.start(); 
} 
相關問題