线程里开启线程,线程里又开启线程,最原始的线程关闭后,后面的线程能否运行?
代码:
public class ThreadTest {
public static void main(String[] args) throws Exception {
Thread a = new Thread() {
public void run() {
Thread b = new Thread() {
public void run() {
Thread c = new Thread() {
public void run() {
System.out.println("C1>>>>>>>>>>start");
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("C2>>>>>>>>>>ing>>");
}
}
};
System.out.println("B1>>>>>>>>>>start");
c.start();
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("B2>>>>>>>>>>ing>>");
}
}
};
System.out.println("A1>>>>>>>>>>start");
b.start();
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("A2>>>>>>>>>>ing>>");
}
}
};
System.out.println("Main1>>>>>>>>>>");
a.start();
System.out.println("Main2>>>>>>>>>>");
Thread.sleep(1000);
a.stop();
System.out.println("Main3>>>>>>>>>>");
}
}
打印:
Main1>>>>>>>>>>
Main2>>>>>>>>>>
A1>>>>>>>>>>start
B1>>>>>>>>>>start
C1>>>>>>>>>>start
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
A2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
Main3>>>>>>>>>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
C2>>>>>>>>>>ing>>
B2>>>>>>>>>>ing>>
结论:
thread.stop能终止调用者本身和run里开启的线程,但不能终止run里开启线程的run里开启的线程。
说人话就是:只能终止自己和下一层,下下层及下下下层等等后续的线程都无法终止。