2009-05-18 125 views
5

我充分意識到萎靡不振線程作爲JVM退出守護線程的影響(如果所有非守護線程退出時,JVM將退出。)守護線程是什麼意思?

是否有其他的副作用來設置一個線程作爲守護進程?

(作爲一個完全拋開,除了語義之外,這是完全不相關的,在這種情況下守護線程的含義並不是倒退:守護進程線程不應使JVM保持活動狀態......例如,如果我寫我自己的HTTP守護進程並開始運行,只要該線程還活着,我不希望JVM保持活動狀態嗎?或者術語'守護進程'是否還有其他語義?)

+2

通常情況下,您有守護線程和非守護線程同時運行:非守護線程正在做有用的工作,但守護線程只是坐在那裏等待發生的事情。有用的工作完成後,程序應該退出;你不希望它被無所事事的線程阻擋。在你的例子中,HTTP守護進程是守護進程*進程*,而不是守護進程線程。有人可能會想到,當沒有非守護進程正在運行時,會關閉桌面計算機,並且您不希望服務器將其保留。 (或者,也許你會...不管怎樣,這不是最好的名字。) – 2009-05-18 21:39:04

回答

4

正如您擁有它,這意味着線程被分離並且只要JVM運行就會運行,除非你明確地停止它。根據規範,只要任何-daemon線程正在運行,JVM就會持續運行。

除此之外,它並不意味着什麼。你可能會認爲這是倒退 - 畢竟,關機(8)殺死守護進程 - 但JVM應該像一個行爲良好的進程,否則,這意味着人們應該能夠期望它終止而不必被殺死。所以這個規範是基於更常見用例的設計決定。

3

守護進程線程是對其他線程的服務。 它只是jvm本身的一個守護進程,不適用於外部世界。因此,如果只有守護進程感染,他們纔不再使用。 如果你想要一個http守護進程,你只需寫一個具有普通線程的httpserver,並使用你的os的工具集作爲守護進程調用它作爲守護進程運行應用程序。

在jvm中構造守護進程線程不是os的守護進程線程。守護進程通常是無限循環,你不想讓你的jvm無限期地繼續運行,而你正在運行的所有守護進程都是等待輸入的(這並不是給定的)。