Java多线程父子线程关系 多线程中篇(六)

有的时候对于Java多线程,咱们会听到“父线程、子线程”的概念。
严格的说,Java中不存在实质上的父子关系
没有方法能够获取一个线程的父线程,也没有方法能够获取一个线程全部的子线程
子线程的消亡与父线程的消亡并无任何关系,不会由于父线程的结束而致使子线程退出(操做系统中如此)。

父线程说法来源

父线程的说法应该是来自于Thread的构造对象时的初始化方法
再次看一下init方法,如下内容截取关键部分
image_5c63e84a_594a
能够看得出来,在init方法中,将建立这个线程的当前线程定义为“父”
        Thread parent = currentThread();
在初始化以后,线程组(若是没设置)、是否为守护线程、优先级、上下文类加载器、父线程ThreadLocal(稍后讲解)都是从当前线程获取的
除了一些初始值的设置来自于所谓“父线程”以外,并无强关系
因此说,对Java中的线程,父线程的概念,只是一种逻辑称呼,建立线程的当前线程就是新线程的父线程,新线程的一些资源来自于这个父线程
在init方法中,对于所谓父线程的处理逻辑,换一个说法就是借助于当前正在运行的线程,对新建立线程进行一些必要的赋值与初始化

测试

下面的示例中,在主线程中建立了一个线程
线程中,循环三次打印当前线程名称,每次打印sleep 1秒
从结果能够看得出来,主线程结束后,子线程并无结束,仍旧是继续运行,等到运行结束后,JVM退出
image_5c63e84b_53a4
ps:上图黄色区域是编译器的提示,没什么事儿
image_5c63e84b_4ad2

结论

在Java中的确存在父线程、子线程的说法,代码中对这种说法也存在必定的逻辑体现
可是这种逻辑体现更多的是一种称谓,是一种人类认知层面上的,在程序这种“较真”的世界里面,所谓父线程只是建立新线程的当前线程
父线程的准确称呼应该被叫作当前线程的建立线程
当听到父线程的说法时,应该当即联想到的是建立线程,建立新线程时一些资源的供给者
一个线程与被他建立出来的线程,除了在建立的时候(init)会有必定的依赖交互以外,对JVM来讲,他们并无什么特别的依赖联系,两个独立的线程。
相关文章
相关标签/搜索