在Java中,如果一个线程被杀死,另一个线程会发生什么?

时间:2011-11-18 09:38:38

标签: java multithreading

我想用Java知道:

  1. 如果主线程被杀死了其他子线程会发生什么?
  2. 如果子线程被杀死了兄弟姐妹和父线程会发生什么?
  3. 我在以下链接中读到,由于线程共享地址空间,因此杀死一个线程也会影响其他线程。

    以下是here的引用。

      

    线程是轻量级进程,它将主要控制流分为多个流,每个控制/线程流将独立执行。系统中进程的活动由线程表示。具有多个线程的进程称为多线程。每个线程都有自己的线程ID(数据类型整数),寄存器,程序计数器,堆栈,错误号。线程可以在同一进程中使用共享内存进行通信。   使用线程来管理和维护应用程序的子任务有不同的优点。当我们使用线程时,使用较少的系统资源进行上下文切换并增加应用程序的吞吐量。线程还简化了程序的结构。任务之间没有特殊的通信机制。   线程也有一些缺点,例如线程不可重用,因为它们依赖于进程并且不能与进程分离。线程不是孤立的,因为它们没有自己的地址空间。线程导致的错误可能会终止整个进程或程序,因为该错误会影响该进程或程序中使用的所有线程的整个内存空间。由于线程共享资源在进程中也可能影响整个进程或程序在线程资源损坏时。对于内存线程的并发读写访问将需要同步。线程通过数据竞争很容易损坏进程的数据,因为进程中的所有线程都具有对同一条数据的写访问权。

    请问您是否可以告诉上述链接中的内容是否适用于java

2 个答案:

答案 0 :(得分:10)

1)“子线程”没有任何结果......

2)“兄弟之间的线索”什么都不会发生......

...具有以下异常:如果所有剩余的线程都是守护程序线程,则应用程序将终止(即,当只剩下守护程序线程时,这些线程也将被终止)。

来自documentation of Thread

  

[...] Java虚拟机继续执行线程,直到发生以下任一情况:

     
      
  • 类Runtime的退出方法已被调用[...]
  •   
  • 所有非守护程序线程的线程已经死亡,或者通过调用run方法返回,或者抛出一个超出run方法传播的异常。
  •   

答案 1 :(得分:0)

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

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