Joh*_*nny 6 java multithreading
当我在另一个线程中创建并启动一个线程时,它会是一个子线程吗?在子线程运行时是否阻止父线程终止?例如:
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
}
}).start();
//Do Sth
}
}).start();
//Do Sth
}
//Do Sth
}).start();
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 13
在您的代码中,对象之间存在父子关系.但是,线程之间没有父子关系的概念.一旦两个线程运行,它们基本上是同行.
假设线程A启动线程B.除非它们之间有明确的同步,否则任何线程都可以随时终止,而不会影响其他线程.
请注意,只要线程存在,任一线程都可以使进程保持活动状态.请参阅Java中的守护程序线程是什么?
当我在另一个线程中创建并启动一个线程时,它会是一个子线程吗?
Java 没有真正的“子”线程概念。当您启动一个线程时,它会从“父”继承守护进程和优先级,但这就是父/子关系的结束。
// in Thread.init()
this.daemon = parent.isDaemon();
this.priority = parent.getPriority();
Run Code Online (Sandbox Code Playgroud)
当线程开始时,它沿着它的“父”运行,两者之间没有链接。
它是否会在子线程运行时阻止父线程的终止?
不,不是的。但是我怀疑您真的想知道线程是否可以阻止应用程序的终止。如果子线程是非守护进程,那么即使主线程(也是非守护进程)完成,您的应用程序也会等待子线程完成。根据定义,JVM 将等待所有非守护线程完成。一旦最后一个非守护线程完成,JVM 就可以终止。