2010-07-13 72 views
14

在JDK> = 1.5的情況下,啓動線程的首選方式應該始終是Executor還是Executor Service,或者如果您不需要ExecutorService提供的內容,是否還有理由更喜歡使用Thread.start?您是否應始終使用ExecutorService而不是開始自己的線程?

對於syncronized,我曾經認爲使用新的Lock實現是首選,直到我是explained otherwise。所以我想知道關於Executors的同樣的事情。他們只是處理更復雜案件的一種方式,還是應該成爲標準選擇?

+0

兩個很好的答案,但我不得不提供接受的提出了與Vector和Hashtable的比較。 – Yishai 2010-07-13 14:24:30

回答

10

就個人而言,因爲Java 5中,我已經完全超過ThreadThreadGroup離開,因爲它們提供了比ExecutorService方式更少的定製和功能。

當使用ExecutorService時,我知道我可以使用Callable,我知道我可以(用一點開銷)安排重複的任務。因此,我認爲Thread對象不贊成使用代碼的直接實例化,因爲VectorHashtable是。

10

Java Concurrency in Practice在部分至少明確規定:6.2

在Java類庫執行任務的主要抽象是Thread,但Executor。 [...]

使用Executor通常是在您的應用程序中實現生產者 - 消費者設計的最簡單途徑。

2

寫入正確的多線程代碼非常困難。 Executor框架的優點在於它實現了開發人員將遇到的大部分繁重工作,只需要實現Callable或Future並編程到java.util.concurrent API。恕我直言,它會產生更多可讀的代碼,並且由於正確管理線程的複雜性而導致錯誤地實現它的機會更少。

相關問題