2011-11-18 135 views
5

我想在Java中知道:在Java中,如果一個線程死亡,另一個線程會發生什麼?

  1. 如果主線程被殺了會發生什麼其他的孩子線程?
  2. 如果子線程被殺死了兄弟和父線程會發生什麼?

我看了下面的鏈接,因爲線程共享地址空間,殺死一個線程也會影響其他線程。

以下是here的報價。

線程是輕量級進程,它將主要控制流分成多個流,並且每個控制/線程流將獨立執行。系統中進程的活動由線程表示。具有多個線程的進程稱爲多線程。每個線程都有自己的線程ID(數據類型整數),寄存器,程序計數器,堆棧,錯誤號。線程可以在同一進程中使用共享內存進行通信。 使用線程來管理和維護應用程序的子任務有不同的優勢。當我們使用線程時,系統資源被用於上下文切換,並增加了應用程序的吞吐量。線程也簡化了程序的結構。任務之間沒有專門的通信機制。 線程也有一些缺點,例如線程不可重用,因爲它們依賴進程並且不能與進程分離。線程不是孤立的,因爲它們沒有自己的地址空間。線程的錯誤原因可能會終止整個進程或程序,因爲該錯誤會影響該進程或程序中使用的所有線程的整個內存空間。由於線程在共享資源的過程中也可能影響整個進程或程序受到線程資源損害的時間。對於併發讀寫訪問內存線程將需要同步。進程的數據很容易被線程通過數據競爭破壞,因爲進程中的所有線程都有對同一段數據的寫訪問權限。

u能吉歐斯請告訴無論是否在上面的鏈接告訴適用於Java的

回答

10

1)什麼都不會發生在「子線程」 ......

2)什麼都不會發生「兄弟線程」...

...有以下異常:如果所有剩餘的線程都是守護進程線程,則應用程序將終止(即只有守護進程線程離開時,這些線程也將被終止) 。

documentation of Thread

[...] Java虛擬機繼續直至出現以下任何一種情況發生時執行線程:

  • Runtime類的exit方法被稱爲[ ...]
  • 不是守護線程的所有線程都已經死了,可以通過從調用返回run方法或通過拋出傳播超出run方法的異常。
+0

感謝您的快速回復。我對第二點有一個疑問。我在以下鏈接中看到,由於共享地址空間的線程,殺死一個線程也會影響其他線程。等待您的回覆 http://www.blurtit.com/q236205.html – nantitv

+1

A)當說「線程也簡化了程序的結構*」時,這種咆哮是完全錯誤的,並且之後它沒有聲明可以修復那些可憐的東西句子。 B)我不認爲它適用於Java。 C)不要明確殺死線程(通過使用Thread.stop)。 Thread.stop方法由於很好的原因而被棄用。 – aioobe

+0

線程可幫助程序在同一時間管理不同的任務。 Thread.stop()方法已被棄用,因爲它是不安全的(想想如果線程正在管理一些重要的數據)。最好在run()方法中用布爾條件將其停止在while循環中。 –

0

在這兩種情況下都沒有。線程彼此獨立運行,從這個意義上說,沒有「父」或「子」線程這樣的事情。該進程將繼續運行,直到沒有線程在其中運行。

一個進程只是一個包含一些線程的容器。線程執行代碼。如果在流程容器中運行一個或多個線程,則該流程將繼續存在。線程之間沒有共生關係,殺死一個人不會殺死另一個人。

相關問題