2011-10-10 16 views
0

如果最後一個非守護進程線程已完成,虛擬機將終止。」 我的問題是,應用程序產生的守護程序線程會發生什麼?爲什麼JVM不會等待它們完成?爲什麼JVM不會等待用戶應用程序產生的守護進程線程?

+0

可能重複的[當主線程停止在java?](http://stackoverflow.com/questions/7416018/when-is-the-main-thread-stops-in-java) – paulsm4

+2

因爲那會打敗守護線程的「特殊」性質。 .NET更明智地稱它們爲前臺線程(非守護進程)和後臺線程(守護進程),其中一個活動的前臺線程(非守護進程)將使後端線程(後臺進程)不會保持虛擬機處於活動狀態。 – 2011-10-10 07:33:19

回答

8

守護進程線程的整個目的是,如果它是唯一運行的線程,它不會讓JVM保持活動狀態; 這是由設計。您可能希望這樣做的原因有很多。

例如,對於Swing應用程序,用戶可能已經在後臺守護程序線程(而不是在事件分派線程上)上調用了長時間運行的任務。在完成任務之前,用戶嘗試退出應用程序。在這個階段,應用程序開發人員可能已經決定立即關閉應用程序,而不是關閉嘗試延遲直到長時間運行的計算完成爲止,因此決定分配計算線程守護進程狀態的原因是更好的。

+0

但是「守護線程會發生什麼?」呢?我猜沒有任何反應。它只是停止運行... – Ringding

+0

程序停止執行後,守護程序線程是否真的停止工作?我的意思是這就像說守護線程取決於主線程的存在。這是真的嗎? –

1

因爲它們是守護線程。這就是它的意思。這並不意味着什麼。

相關問題