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