似乎有許多不同的方法可以創建線程(Runnable vs Thread類)和ThreadPools。最高效的Java線程技術?
在效率方面有什麼區別,哪些是在Java中創建和彙集線程的最高效(就性能而言)技術?
似乎有許多不同的方法可以創建線程(Runnable vs Thread類)和ThreadPools。最高效的Java線程技術?
在效率方面有什麼區別,哪些是在Java中創建和彙集線程的最高效(就性能而言)技術?
在一天結束時,他們都依靠相同的底層Thread
機制來實際完成工作。這意味着如果你問「什麼是啓動單線程的最有效方法?」答案是,創建一個Thread
對象並調用start()
,因爲在最終創建Thread
對象並在其上調用start()
之前,任何其他方法都會採取其他一些步驟。
這並不意味着這是產生線程的最佳方式,它只是意味着它是從Java代碼中最低級的方式。創建線程的其他方式爲您提供了不同類型的基礎結構來管理底層Thread
,因此您選擇的方法應取決於您所需的基礎架構數量和種類。
如果您需要處理很多短而頻繁的請求,最好使用ThreadPool
,這樣您可以重新使用已打開的線程併爲其分配Runnable
任務。
但是,當您需要爲單個任務操作啓動線程或實例化一個運行所有應用程序時間或長時間運行的守護程序線程時,最好創建一個線程並終止它,不再需要它了。
對不起,我知道這一點。我基本上要求的是Thread比實現Runnable更快,然後,使用ThreadPool技術,它們在性能方面有什麼不同? – user997112 2012-04-07 03:31:05
擴展一個Thread或創建一個並分配一個Runnable的差異是微不足道的。在第一種情況下,您創建一個java對象並啓動線程,在第二個創建Runnable的對象中,創建一個帶有Runnable的線程並啓動它。如果你所處理的任務不是持續的(如果你需要啓動一個線程,則不需要結束),這兩個解決方案之間的差異並不重要。 – dash1e 2012-04-07 03:37:38
這取決於你的用例。 – Jeffrey 2012-04-07 03:01:48
你需要做什麼? – dash1e 2012-04-07 03:10:45
@ dash1e,我一般問。每種技術有哪些不同的最佳場景? – user997112 2012-04-07 03:22:11