2010-09-21 5 views
0

Я могу создать класс, который расширяет Thread и переопределяет метод run с помощью цикла. Затем я запускаю его с помощью myThread.start(), который создает поток ОС и выполняет мой run(). Это все хорошо.Android Информация о файле

Однако я не совсем понимаю детали. Я позабочусь об этом, используя тестовый код, когда я получу шанс, но до этого никто не может ответить на эти вопросы:

Q1. Когда конструктор выполняется, предположительно, когда объявлен myThread, или при запуске()?

Q2. Что происходит, когда мой код run() завершается? Есть ли способ заставить его работать снова в том же потоке (т. Е. Не потерять все значения переменных потока, определенные в классе) Предположительно, вызов start() может создать новый поток os?

Q3. Предположительно просто звоню myThread.run() будет выполнять мой бег() в контексте текущей деятельности, не MyThread, в этом случае, как он может получить доступ к переменным потоков?)

-Frink

+1

Рассмотрите возможность использования интерфейса «Runnable» в своем собственном классе, а не расширения класса «Thread». Обычно это помогает понять, что происходит дальше. – ob1

ответ

4

A1) Когда вы создаете экземпляр вашего класса MyThread

A2) Нити не могут запускаться дважды или перезапускаться, as stated in the documentation.

A3) Да, вызов run() будет выполнять эту функцию в текущем потоке, а не в новом потоке. Не имеет смысла создавать класс, который расширяет Thread, если вы хотите просто позвонить run(). Вы всегда должны звонить start().

+0

Подчеркивание № 3: вы всегда должны * вызвать start(). Если вы этого не сделаете, объект Thread просочится, потому что он связан в списке ThreadGroup, когда он создан и не отсоединен, пока он не завершится. – fadden

Смежные вопросы