2014-04-04 12 views
4

我對多線程的概念相當陌生,有一個方面對我來說並不清楚。做runnable.run()是錯誤的嗎?

有兩種方法來創建並運行一個線程:

  1. 擴展Thread類和start()線程。
  2. 創建一個Runnable對象,將其傳遞給Thread構造函數和start()該線程。

而且this博客文章指出,我們始終應該使用start()左右是我的印象,它啓動一個線程。

但在其中一個答案here中,您可以看到一個人如何使用runnable.run()。它讓我覺得有點不對勁。

這是正常的嗎?應該避免嗎?你可以在你的答案中明確,但任何建議,將不勝感激。

+3

'run'只是'Runnable'接口中聲明的方法。沒有魔法。 –

+0

好的。我應該運行runnable嗎?或者開始一個主題。不是專門設計用於線程的可運行界面嗎? – user3081519

+0

當然,主要。在內部,'Thread'只是在你傳遞的'Runnable'實例上調用'run'。沒有什麼能阻止你這樣做。但請注意,這並不能啓動一個主題。 –

回答

5

他們只是不同的東西。 run()在當前線程中執行Runnable。另一方面,調用start()會導致Runnable在新線程中運行。

本教程指出它是一個陷阱。你經歷了所有的麻煩來創建一個線程,所以如果你繼續在當前線程中運行它,那很可能是一個錯誤。