2016-01-07 2 views
2

Есть что-то, что я не понимаю нитями в целом. В моем случае с использованием Java и Android.Thread in thread: что происходит, если родительский поток убит?

Предположим, у меня есть нить с именем A, которая запускает нить B. Если нить A останавливается, то поток B будет продолжать жить. Как это возможно? Кто принадлежит к теме B? В основной поток?

класс Thread

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

Нити не «принадлежат» друг другу. У них даже нет родителей. – immibis

+0

Вы найдете эту конструкцию Parent/Child-Ownership, когда работаете с процессами, а не когда работаете с потоками! – ParkerHalo

+0

Да, например, при использовании 'fork()' в C? – FrenchFalcon

ответ

3

От Docs Thread

A Thread - это параллельная единица исполнения. Он имеет свой собственный стек вызовов для вызываемых методов, их аргументы и локальные переменные. Каждое приложение имеет, по крайней мере, один поток, запущенный при его запуске, основной поток, в главной теме. Среда выполнения хранит собственные потоки в группе системных потоков.

+0

Это именно то, что я хотел ... Я должен был прочитать документацию на Android. Благодаря ! – FrenchFalcon

2

Скажем, у меня есть тема под названием A, который запускает Thread B. Если Поток А останавливается, Thread B будет продолжать жить. Как это возможно?

Это легко возможно - нет ничего, что заставило бы нить B остановиться, поэтому она не останавливается.

Кто принадлежит к теме B сейчас? В основной поток?

Нитки не принадлежат друг другу. Тот факт, что это был поток A, который запустил Thread B, нигде не записывается - насколько это касается системы, у вас есть два потока без каких-либо отношений между ними.

+0

Что случилось с этим ответом? – FrenchFalcon

+0

@gio Вы уверены, что не испытываете излишней чувствительности? – immibis

+0

не очень хороший пример с родителями – gio