如果创建它的线程在运行时退出,那么另一个线程是否会采用Java线程?

时间:2017-11-23 22:08:19

标签: java multithreading

在Linux中,如果进程分叉子进程,然后在子进程继续运行时退出,则init进程将采用子进程。

我想知道java线程是否也会发生类似的事情?

Java线程之间是否存在父子关系?

当Java线程创建另一个线程并且不调用join()等待另一个线程完成运行,并且在另一个线程运行时存在时,其他线程是否会被其他一些线程采用?

感谢。

2 个答案:

答案 0 :(得分:1)

  

Java线程之间是否存在父子关系?

没有。因此也没有采纳。

答案 1 :(得分:1)

  

Java线程之间是否存在父子关系?

不,没有这样的关系。

  

虽然前面章节中的大多数讨论仅关注代码的行为,即一次执行单个语句或表达式,即通过单个线程,Java虚拟机可以支持许多执行线程一旦。 这些线程独立地执行对驻留在共享主存储器中的值和对象进行操作的代码。可以通过使用许多硬件处理器,通过对单个硬件处理器进行时间切片或通过时间切片来支持线程。硬件处理器。

     

线程由Thread类表示。用户创建线程的唯一方法是创建此类的对象;每个线程都与这样的对象相关联。在相应的start()对象上调用Thread方法时,线程将启动。

     

- Java SE > Java SE Specifications > Java Language Specification > Chapter 17. Threads and Locks

另外,请参阅Thread class (Java Platform SE 8)的文档:此处没有提及此类关系。

  

当Java线程创建另一个线程并且不调用join()等待另一个线程完成运行,并且在另一个线程运行时存在时,其他线程是否会被其他一些线程采用?

不,任何其他线程都不会采用创建的(第二个)线程。但请注意:

  

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

     
      
  • 已调用类exit的{​​{1}}方法,安全管理器已允许退出操作。
  •   
  • 所有非守护程序线程的线程都已死亡,无论是通过调用返回Runtime方法还是抛出超出run方法的异常。
  •   
     

- Thread class (Java Platform SE 8)