Executor
Executor 管理多個(gè)異步任務(wù)的執(zhí)行,而無(wú)需程序員顯式地管理線(xiàn)程的生命周期。這里的異步是指多個(gè)任務(wù)的執(zhí)行互不干擾,不需要進(jìn)行同步操作。
主要有三種 Executor:
1.CachedThreadPool: 一個(gè)任務(wù)創(chuàng)建一個(gè)線(xiàn)程;
2.FixedThreadPool: 所有任務(wù)只能使用固定大小的線(xiàn)程;
3.SingleThreadExecutor: 相當(dāng)于大小為 1 的 FixedThreadPool。
Daemon
守護(hù)線(xiàn)程是程序運(yùn)行時(shí)在后臺(tái)提供服務(wù)的線(xiàn)程,不屬于程序中不可或缺的部分。
當(dāng)所有非守護(hù)線(xiàn)程結(jié)束時(shí),程序也就終止,同時(shí)會(huì)殺死所有守護(hù)線(xiàn)程。
main() 屬于非守護(hù)線(xiàn)程。使用 setDaemon() 方法將一個(gè)線(xiàn)程設(shè)置為守護(hù)線(xiàn)程。
sleep()
Thread.sleep(millisec) 方法會(huì)休眠當(dāng)前正在執(zhí)行的線(xiàn)程,millisec 單位為毫秒。
sleep() 可能會(huì)拋出 InterruptedException,因?yàn)楫惓2荒芸缇€(xiàn)程傳播回 main() 中,因此必須在本地進(jìn)行處理。線(xiàn)程中拋出的其它異常也同樣需要在本地進(jìn)行處理。
yield()
對(duì)靜態(tài)方法 Thread.yield() 的調(diào)用聲明了當(dāng)前線(xiàn)程已經(jīng)完成了生命周期中最重要的部分,可以切換給其它線(xiàn)程來(lái)執(zhí)行。該方法只是對(duì)線(xiàn)程調(diào)度器的一個(gè)建議,而且也只是建議具有相同優(yōu)先級(jí)的其它線(xiàn)程可以運(yùn)行。