2011-11-18 90 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

在这两种情况下都没有。线程彼此独立运行,从这个意义上说,没有“父”或“子”线程这样的事情。该进程将继续运行,直到没有线程在其中运行。

一个进程只是一个包含一些线程的容器。线程执行代码。如果在流程容器中运行一个或多个线程,则该流程将继续存在。线程之间没有共生关系,杀死一个人不会杀死另一个人。

相关问题