Java(Android)线程池
執(zhí)行一個(gè)異步任務(wù)你還只是如下new Thread嗎? [java]?view plaincopy
那你就out太多了,new Thread的弊端如下:
a. 每次new Thread新建對象性能差。
b. 線程缺乏統(tǒng)一管理,可能無限制新建線程,相互之間競爭,及可能占用過多系統(tǒng)資源導(dǎo)致死機(jī)或oom。
c. 缺乏更多功能,如定時(shí)執(zhí)行、定期執(zhí)行、線程中斷。
相比new Thread,Java提供的四種線程池的好處在于:
a. 重用存在的線程,減少對象創(chuàng)建、消亡的開銷,性能佳。
b. 可有效控制最大并發(fā)線程數(shù),提高系統(tǒng)資源的使用率,同時(shí)避免過多資源競爭,避免堵塞。
c. 提供定時(shí)執(zhí)行、定期執(zhí)行、單線程、并發(fā)數(shù)控制等功能。
?
2、Java 線程池
Java通過Executors提供四種線程池,分別為:
newCachedThreadPool創(chuàng)建一個(gè)可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
newFixedThreadPool 創(chuàng)建一個(gè)定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊(duì)列中等待。
newScheduledThreadPool 創(chuàng)建一個(gè)定長線程池,支持定時(shí)及周期性任務(wù)執(zhí)行。
newSingleThreadExecutor 創(chuàng)建一個(gè)單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。
(1). newCachedThreadPool
創(chuàng)建一個(gè)可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。示例代碼如下:
線程池為無限大,當(dāng)執(zhí)行第二個(gè)任務(wù)時(shí)第一個(gè)任務(wù)已經(jīng)完成,會復(fù)用執(zhí)行第一個(gè)任務(wù)的線程,而不用每次新建線程。
(2). newFixedThreadPool
創(chuàng)建一個(gè)定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊(duì)列中等待。示例代碼如下:
因?yàn)榫€程池大小為3,每個(gè)任務(wù)輸出index后sleep 2秒,所以每兩秒打印3個(gè)數(shù)字。
定長線程池的大小最好根據(jù)系統(tǒng)資源進(jìn)行設(shè)置。如Runtime.getRuntime().availableProcessors()。可參考PreloadDataCache。
(3) newScheduledThreadPool
創(chuàng)建一個(gè)定長線程池,支持定時(shí)及周期性任務(wù)執(zhí)行。延遲執(zhí)行示例代碼如下:
表示延遲3秒執(zhí)行。
定期執(zhí)行代碼如下:
[java]?view plaincopy表示延遲1秒后每3秒執(zhí)行一次。
ScheduledExecutorService比Timer更安全,功能更強(qiáng)大,后面會有一篇單獨(dú)進(jìn)行對比。
(4)、newSingleThreadExecutor
創(chuàng)建一個(gè)單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。示例代碼如下:
結(jié)果依次輸出,相當(dāng)于順序執(zhí)行各個(gè)任務(wù)。
單線程在某些情況下非常有用,現(xiàn)行大多數(shù)GUI程序都是單線程的。后面會介紹在Android中單線程在性能優(yōu)化方面的用處。
轉(zhuǎn)載于:https://www.cnblogs.com/hudabing/p/4150265.html
總結(jié)
以上是生活随笔為你收集整理的Java(Android)线程池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李连杰成名作!《少林寺》等4K版重映 堪
- 下一篇: node.js async流程控制器-