主要的影響如下:
消耗時間:線程的創建和銷毀都需要時間,當有大量的線程創建和銷毀時,那么這些時間的消耗則比較明顯,將導致性能上的缺失
非常耗CPU和內存:大量的線程創建、執行和銷毀是非常耗cpu和內存的,這樣將直接影響系統的吞吐量,導致性能急劇下降,如果內存資源占用的比較多,還很可能造成OOM
容易導致GC頻繁的執行:大量的線程的創建和銷毀很容易導致GC頻繁的執行,從而發生內存抖動現象,而發生了內存抖動,對於移動端來說,最大的影響就是造成界面卡頓
而針對上述所描述的問題,解決的辦法歸根到底就是:重用已有的線程,從而減少線程的創建。所以這就涉及到線程池(ExecutorService)的概念了,線程池的基本作用就是進行線程的復用,下面將具體介紹線程池的使用
使用線程池管理線程的優點
節省系統的開銷:線程的創建和銷毀由線程池維護,一個線程在完成任務后並不會立即銷毀,而是由后續的任務復用這個線程,從而減少線程的創建和銷毀,節約系統的開銷
節省時間:線程池旨在線程的復用,這就可以節約我們用以往的方式創建線程和銷毀所消耗的時間,減少線程頻繁調度的開銷,從而節約系統資源,提高系統吞吐量
提高性能:在執行大量異步任務時提高了性能
方便控制:Java內置的一套ExecutorService線程池相關的api,可以更方便的控制線程的最大並發數、線程的定時任務、單線程的順序執行等
優先級線程池的優點
從上面我們可以得知,創建一個優先級線程池非常有用,它可以在線程池中線程數量不足或系統資源緊張時,優先處理我們想要先處理的任務,而優先級低的則放到后面再處理,這極大改善了系統默認線程池以FIFO方式處理任務的不靈活
原文:https://blog.csdn.net/github_37130188/article/details/89819673