2011-03-22 130 views
4

我遇到過這種說法,爲了創建一個新線程,最好使用Runnable接口,而不是擴展Thread類。如果這是真的,爲什麼Java甚至允許我們擴展Thread類。爲什麼不做它final線程和運行

+0

[「implements Runnable」vs「extends Thread」]的可能重複(http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) – 2013-03-12 16:41:55

回答

4

因爲你製作的東西幾乎肯定不是線程。這是一個ThingTheDoesSomeUsefulWork,你恰好想要它在一個單獨的線程上做有用的工作。假設我正在寫一個每30秒輪詢一次Web服務器的事情。是ThingThatPollsWebServer一個線程?或者它只是輪詢Web服務器的事情。

此外,製作Runnable可以更容易地進行測試,此外,它還使您可以靈活地運行不使用線程或使用執行程序框架的東西。

+0

這是如何回答我的問題。你似乎只提倡Runnable接口。怎麼樣延長線程? – 2011-03-23 05:49:34

+0

是的,因爲這是正確的做法!只有擴展線程,如果你想專門化它的行爲。 – dty 2011-03-23 08:22:01

1

您可能想要更改線程的行爲或添加其他功能。如果是這種情況,那麼擴展Thread類是最合適的。

+0

正確。引用的陳述不是無條件的,所以接受它作爲真理,然後想知道爲什麼'Thread'類設計沒有遵循它是有點誤導。 – erickson 2011-03-22 22:08:22

+0

你是對的。但是你多久看到'Thread'被分類爲不是隻執行'run'? – 2011-03-22 22:11:50

+0

btw,如果我想改變'Class'或者'String'的行爲,我應該怎麼做?不,先生。這是不合邏輯的。 – 2011-03-22 22:23:43

-2

使用線程是舊的方式(在java 5.0之前)使用,線程:)。看看類ExecutorService。