浅谈安卓线程池相关问题
作為一個標準的程序員,我們都非常清楚。線程的創建和銷毀時一個耗時的操作,如果在程序中反復創建和銷毀,那么APP的流暢度會很受影響,甚至會奔潰。為了增加程序健壯性且能是實現復雜業務邏輯,這時候我們引入線程池的概念。
線程池的優點在于減少了創建線程的消耗,每一次使用線程直接從線程池中拿來用即可,缺點就是線程池會一直占用內存,如果當我們只是用一個線程時,多余的創建出來的會造成資源浪費,也就是驚群現象。
A:線程的實現方法
?POOL_SIZE?=?4;//?線程池的大小最好設置成為CUP核數的2N????
MAX_POOL_SIZE?=?6;//?設置線程池的最大線程數?
?KEEP_ALIVE_TIME?=?4;//?設置線程的存活時間?
?//?創建線程池工廠??? ? ? ?ThreadFactory?factory?=?new?PriorityThreadFactory("threadpool",?android.os.Process.THREAD_PRIORITY_BACKGROUND); ?? ? ??
?//?創建工作隊列??? ? ?
BlockingQueue<Runnable>?workQueue?=?new?LinkedBlockingDeque<Runnable>(); ?? ? mExecutor?=?nThreadPoolExecutor(POOL_SIZE,?MAX_POOL_SIZE,?KEEP_ALIVE_TIME,?TimeUnit.SECONDS,?workQueue,?factory); ? } ?
?//?在線程池中執行線程?id
?submit(Runnable?command){?
?Executor.execute(command)};?
?//在線程池的停止和關閉
ThreadPoolExecutor提供了兩個方法,用于線程池的關閉,分別是shutdown()和shutdownNow(),其中:
shutdown():不會立即終止線程池,而是要等所有任務緩存隊列中的任務都執行完后才終止,但再也不會接受新的任務
shutdownNow():立即終止線程池,并嘗試打斷正在執行的任務,并且清空任務緩存隊列,返回尚未執行的任務
B:execute()執行
addIfUnderCorePoolSize():在線程池大小小于核心線程池大小的情況下,擴展線程池
addIfUnderMaximumPoolSize():在線程池大小小于線程池大小上限的情況下,擴展線程池
ensureQueuedTaskHandled():保證在線程池關閉的情況下,新加入隊列的線程也能正確處理
C:核心線程問題
核心線程會一直存活,即使沒有任務需要處理。當線程數小于核心線程數時,即使現有的線程空閑,線程池也會優先創建新線程來處理任務,而不是直接交給現有的線程處理。核心線程在allowCoreThreadTimeout被設置為true時會超時退出,默認情況下不會退出
總結
以上是生活随笔為你收集整理的浅谈安卓线程池相关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弗洛伊德判环算法
- 下一篇: 安卓四大组件之Activity