日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈安卓线程池相关问题

發布時間:2025/4/5 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈安卓线程池相关问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一個標準的程序員,我們都非常清楚。線程的創建和銷毀時一個耗時的操作,如果在程序中反復創建和銷毀,那么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時會超時退出,默認情況下不會退出




總結

以上是生活随笔為你收集整理的浅谈安卓线程池相关问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。