内部线程中的线程:如果父线程被杀死会发生什么?

时间:2016-01-07 12:47:48

标签: java android multithreading

总的来说,我无法理解线程。就我而言, 使用Java和Android。

假设我有一个名为A的线程,它会启动线程B。如果线程A停止,则线程B将继续存在。这怎么可能?谁现在属于线程B?到主线程?

主题类

public class ParentThread extends Thread {

    public void run(){
        Log.e("PARENT THREAD", "STARTS RUNNING");
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    Log.e("CHILD THREAD", "IS ALIVE");
                    try {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException exc) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        Log.e("PARENT THREAD", "STOPS RUNNING");
    }
}

活动

new ParentThread().start();

Logcat输出

01-07 13:45:16.726 22063-22081/? E/PARENT THREAD: STARTS RUNNING
01-07 13:45:16.726 22063-22081/? E/PARENT THREAD: STOPS RUNNING
01-07 13:45:16.727 22063-22082/? E/CHILD THREAD: IS ALIVE
01-07 13:45:17.727 22063-22082/? E/CHILD THREAD: IS ALIVE
01-07 13:45:18.727 22063-22082/? E/CHILD THREAD: IS ALIVE
01-07 13:45:19.727 22063-22082/? E/CHILD THREAD: IS ALIVE
...

2 个答案:

答案 0 :(得分:5)

来自文档Thread

  

线程是并发执行单元。它有自己的调用堆栈,用于调用方法,它们的参数和局部变量。每个应用程序在启动时至少有一个线程运行,主线程在主ThreadGroup中运行。运行时在系统线程组中保留自己的线程。

答案 1 :(得分:3)

  

假设我有一个名为A的线程,它启动一个线程B.如果线程A停止,线程B将继续存在。这怎么可能?

很容易实现 - 没有什么可以让线程B停止,所以它不会停止。

  

谁现在属于线程B?到主线程?

线程不属于彼此。启动线程B的是线程A的事实并没有记录在任何地方 - 就系统而言,你有两个线程,它们之间没有任何关系。