2012-09-19 134 views
0

我在理解某些類型的製作胎面循環之間的差異時遇到了問題。關於線程和可運行程序

一個是(粗略示範):

Thread thread=new Thread("name") { 
public void run() 
    { 
    // do stuff 
    } 
}.start(); 

第二個是: 使該imlpements可運行一個類, 創建線程:

Thread thread = new Thread(this,"name").start(); 

和第三(在機器人,我不,如果它可以工作一些如何): 做一個處理程序, 創建一個Runnable, 和handler.postDelayed(runnable)handler.post(runnable)

我不明白有什麼區別,我唯一注意到的是,使一個線程使運行循環比使用處理程序的工作更快。 有人可以向我解釋他們之間有什麼區別,我應該使用什麼?

+0

重新使用線程可以執行得更好,否則它們都是一樣的。它被認爲是不好的做法延伸線程,因爲這可能會導致各種意想不到的錯誤。 –

+0

以什麼方式使用線程?使用處理程序?或者只是做一個簡單的線程線程? –

+0

您可以重新使用帶線程池的線程,例如ExecutorService或爲您創建的事件線程,例如UI線程。 –

回答

2

第一種和第二種方式完全相同。這只是不同的構造,可以在不同情況下更有用。請注意0​​執行Runnable,並可能只是在新線程中運行自己。

第三種方式是由你誤解了一點。 Handler在實例化Handler的線程中運行Runnable(除非指定另一個looper)。如果您在UI線程中創建了Handler,它也會在UI線程中運行Runnable。結果它可能會工作得更慢。

+0

我會這樣說,除非你有一個很好的理由,否則不要擴展Thread類。堅持實現Runnable接口。 – Matt

+0

除了邏輯結構的美學分離之外,是否有任何不重寫線程運行方法的好理由?任何可能重要的潛在問題都知道? –

+0

不一定是個問題,但'Runnable'也可以傳遞給'ExecutorService'。雖然你也可以傳遞一個'Thread'對象,這會讓人感到困惑和不必要。 – Tudor