Android开发之线程池管理ThreadPoolExecutor和Executors.newSingleThreadExecutor()
生活随笔
收集整理的這篇文章主要介紹了
Android开发之线程池管理ThreadPoolExecutor和Executors.newSingleThreadExecutor()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Android開發中網絡請求數據在Android4.0以后禁止在主線程請求,那么我們只有新開啟線程請求數據了
一般都喜歡簡單點這樣寫:
new Thread(new Runnable() {@Overridepublic void run() {}}).start();new Thread() {@Overridepublic void run() {super.run();}}.start();這樣寫確實簡潔,但是一般不建議這樣寫。我們用線程池來會更好
寫法一:創建單個線程池:
Executors.newSingleThreadExecutor().execute(new Runnable() {@Overridepublic void run() {}});但是這樣寫阿里巴巴java代碼規范工具會警告如下:
?
所以我們用如下方法:
// ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler) // corePoolSize: 核心線程數,能夠同時執行的任務數量 // maximumPoolSize:除去緩沖隊列中等待的任務,最大能容納的任務數(其實是包括了核心線程池數量) // keepAliveTime:超出workQueue的等待任務的存活時間,就是指maximumPoolSize里面的等待任務的存活時間 // unit:時間單位 // workQueue:阻塞等待線程的隊列,一般使用new LinkedBlockingQueue<Runnable>()這個,如果不指定容量, // 會一直往里邊添加,沒有限制,workQueue永遠不會滿; // threadFactory:創建線程的工廠,使用系統默認的類 // handler:當任務數超過maximumPoolSize時,對任務的處理策略,默認策略是拒絕添加int corePoolSize = Runtime.getRuntime().availableProcessors() * 2 + 1;int maxNumPoolSize = corePoolSize+1;long keepAliveTime = 1;TimeUnit unit = TimeUnit.HOURS;ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize,maxNumPoolSize,keepAliveTime,unit,new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());threadPoolExecutor.execute(new Runnable() {@Overridepublic void run() {}});}關于線程池ThreadPoolExecutor的說明:
1.ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler) corePoolSize: 核心線程數,能夠同時執行的任務數量 maximumPoolSize:除去緩沖隊列中等待的任務,最大能容納的任務數(其實是包括了核心線程池數量) keepAliveTime:超出workQueue的等待任務的存活時間,就是指maximumPoolSize里面的等待任務的存活時間 unit:時間單位 workQueue:阻塞等待線程的隊列,一般使用new LinkedBlockingQueue<Runnable>()這個,如果不指定容量,會一直往里邊添加,沒有限制,workQueue永遠不會滿; threadFactory:創建線程的工廠,使用系統默認的類 handler:當任務數超過maximumPoolSize時,對任務的處理策略,默認策略是拒絕添加執行流程:當線程數小于corePoolSize時,每添加一個任務,則立即開啟線程執行當corePoolSize滿的時候,后面添加的任務將放入緩沖隊列workQueue等待;當workQueue也滿的時候,看是否超過maximumPoolSize線程數,如果超過,默認拒絕執行 舉例說明: 假如:corePoolSize=2,maximumPoolSize=3,workQueue容量為8;最開始,執行的任務A,B,此時corePoolSize已用完,再次執行任務C,則C將被放入緩沖隊列workQueue中等待著,如果后來又添加了7個任務,此時workQueue已滿,則后面再來的任務將會和maximumPoolSize比較,由于maximumPoolSize為3,所以只能容納1個了,因為有2個在corePoolSize中運行了,所以后面來的任務默認都會被拒絕。?
總結
以上是生活随笔為你收集整理的Android开发之线程池管理ThreadPoolExecutor和Executors.newSingleThreadExecutor()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开发之APP打开小程序后小
- 下一篇: Android开发中常用的注释图案