後臺執行緒(daemon)

貓毛·波拿巴發表於2018-08-15
概念
    所謂後臺執行緒,是指在程式執行的時候在後臺提供一種通用服務的執行緒,並且這種執行緒並不屬於程式中不可或缺的部分。因此,當所有的非後臺執行緒結束時,程式也就終止了,同時會殺死程式中的所有後臺執行緒。反過來說,只要有任何非後臺執行緒還在執行,程式就不會終止。比如,執行main()的就是一個非後臺執行緒。——《Java程式設計思想》
 
既然是通用服務執行緒,能隨便關閉嗎,關閉了,不就會影響需要它的程式了嗎?
    注意,這裡指的後臺執行緒是針對某個程式的。它的Scope是某個應用,而不是整個作業系統。如果整個應用都沒有再需要它的執行緒的時候,它的存在還有什麼意義呢。所以當所有非後臺執行緒結束的時候,後臺執行緒也就沒有什麼存在的必要了。
 
後臺執行緒是什麼標識,是如何體現的?
    Thread物件有一個setDaemon的方法,只要設定為true即可
 
誰來殺死後臺執行緒,什麼時候殺死?
   當最後一個非後臺執行緒結束的時候,JVM會自動殺死所有標識為daemon的執行緒。而且在沒有非後臺執行緒的時候,這些後臺執行緒就會被殺死。
 
為什麼要設定成後臺執行緒?
    也可以問,為什麼有些執行緒要隨著程式的結束而結束。是這樣的,因為有些執行緒是主執行緒之外在執行的,它在本地有引用,當程式結束的時候,垃圾回收器不會回收它,它仍然在執行。這樣就很麻煩。它會繼續佔用電腦的資源。
 
注:如果後臺執行緒建立新的執行緒,那麼這些它的子執行緒都是後臺執行緒。
 

相關文章