android提供的線程池
new Thread的缺點:

每次new Thread新建對象都會影響性能
線程缺乏統一管理,可能出現無限制新建線程,導致相互競爭,及可能占用過多系統資源導致死機或oom
沒有定時執行、定期執行、線程中斷等功能
相比new Thread,Java提供的四種線程池的優點:
重用存在的線程,減少對象創建、消亡的開銷,性能好
能夠有效控制最大并發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞
提供定時執行、定期執行、單線程、并發數控制等功能
Android的線程池主要有四個:
newSingleThreadExecutor:單線程池,只有一個線程在運行
newCachedThreadPool :回收型線程池,可以重復利用之前創建過的線程,運行線程最大數是Integer.MAX_VALUE
newFixedThreadPool:固定大小的線程池,跟回收型線程池類似,只是可以限制同時運行的線程數量
ScheduledExecutorService:可以實現循環或延遲任務的線程池。
newSingleThreadExecutor
newSingleThreadExecutor是用來創建一個單線程的線程池,這種情況下只有一個線程在工作。如果這個線程由于各種原因結束,則會創建一個新的線程來代替它。當任務提交時會按順序插入任務隊列,執行時從隊列頭部取出任務執行,保證了所有任務的執行順序按照提交順序來執行。
newSingleThreadExecutor Demo已上傳GitHub
newCachedThreadPool
一個可以根據需要創建新線程的線程池。如果在使用時,線程池中的線程沒有空閑的,則創建一個新線程并添加到池中;如果有被使用完又還沒被銷毀的線程,則復用該線程。線程池中那些超過 60 秒未被使用的線程,將會被終止并從緩存中移除。因此,長時間保持空閑的線程池不會使用任何資源。
這種線程池比較靈活,對于執行很多短期異步任務的程序而言,這些線程池通??商岣叱绦蛐阅?。
newCachedThreadPool Demo已上傳GitHub
newFixedThreadPool
創建一個固定數量nThreads的線程池。線程池中的線程操作同一個共享的無界隊列。在任意時刻,最多只有nThreads個線程在同時執行,如果此時,有新的任務提交到無界隊列中,那么它只有等待,直到線程池中有一個線程可用為止。如果線程池的任何線程由于在執行期間失敗而被終止了,此時,如果有新的任務在無界隊列中,那么它就會創建一個新的線程來取代被關閉了線程,但線程總數不超過nThreads。線程池中的線程不會自動關閉,需要我們主動去關閉它們。
Demo
ScheduledExecutorService
最大優點除了線程池的特性以外,還可以實現循環或延遲任務。
ScheduledExecutorService 和 Timer 的區別
Timer的內部只有一個線程,如果有多個任務的話就會順序執行,這樣我們的延遲時間和循環時間就會出現問題。ScheduledExecutorService是線程池,所以就不會出現這個情況,在對延遲任務和循環任務要求嚴格的時候,就需要考慮ScheduledExecutorService了。
Demo
Android 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。