1.用戶線程和守護線程的區(qū)別
用戶線程和守護線程都是線程,區(qū)別是Java虛擬機在所有用戶線程dead后鹿蜀,程序就會結(jié)束。而不管是否還有守護線程還在運行服球,若守護線程還在運行耻姥,則會馬上結(jié)束。很好理解有咨,守護線程是用來輔助用戶線程的,如公司的保安和員工蒸健,各司其職座享,當員工都離開后,保安自然下班了似忧。
2.用戶線程和守護線程的適用場景
由兩者的區(qū)別及dead時間點可知渣叛,守護線程不適合用于輸入輸出或計算等操作,因為用戶線程執(zhí)行完畢盯捌,程序就dead了淳衙,適用于輔助用戶線程的場景,如JVM的垃圾回收饺著,內(nèi)存管理都是守護線程箫攀,還有就是在做數(shù)據(jù)庫應(yīng)用的時候,使用的數(shù)據(jù)庫連接池幼衰,連接池本身也包含著很多后臺線程靴跛,監(jiān)聽連接個數(shù)、超時時間渡嚣、狀態(tài)等梢睛。
3.創(chuàng)建守護線程
調(diào)用線程對象的方法setDaemon(true),設(shè)置線程為守護線程识椰。
1)thread.setDaemon(true)必須在thread.start()之前設(shè)置绝葡。
2)在Daemon線程中產(chǎn)生的新線程也是Daemon的。
3)不是所有的應(yīng)用都可以分配給Daemon線程來進行服務(wù)腹鹉,比如讀寫操作或者計算邏輯藏畅。因為Daemon Thread還沒來得及進行操作,虛擬機可能已經(jīng)退出了功咒。