2013-06-25 3 views
13

Это довольно простой вопрос о лексике потоков Java.Когда Java-поток жив?

Я не вижу никаких возможных дубликатов, но может быть.

Что означает слово alive обратитесь к документации по Оракулам?

Это метод run() еще не заполнен или это какой-либо другой параметр?

+11

Ответ есть: «* Нить живая, если она была запущена и еще не умерла. *». Эта ссылка также вам поможет: http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/states.html – Maroun

+1

Спасибо за эту диаграмму. Это было очень полезно. –

ответ

23

Согласно Javadoc Вы упоминалось:

Поток жив, если он был запущен и еще не умер.

Поток «начинается», когда его метод вызывается start() и «умирает» в конце своего метода run(), или когда stop() (теперь устаревшее) вызывается. Итак, да, поток «живой», когда его метод run() все еще продолжается, но он также «жив» в окне времени между вызовом start() и неявным вызовом метода run() JVM.

Вы также можете проверить Thread.getState() и interesting information about Thread States, предложенный @Marou Maroun.

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

EDIT: Как было предложено @zakkak, нить можно считать живой, хотя метод run() еще не начался. Если вы хотите иметь правильный контроль, когда он будет вызываться, используйте ScheduledExecutorService, в частности метод schedule(), который дает вам более точное расписание выполнения.

+0

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

+1

Я обновил свой ответ, включив вашу ссылку и свой комментарий. Сейчас половина твоей :) – Matthieu

+4

Это все твое :) Хорошо объяснил ответ. – Maroun

1

Нить жива, когда на него вызывается метод start и до его смерти. Он может переместиться в состояние ожидания до того, как он будет мертв, даже если он находится в состоянии ожидания, он все еще жив.

От живого до мертвого, оно может перемещаться от runnable к состоянию waiting состоянии.

2

Нить живая, когда она находится в новом состоянии/Running/wait. По существу, может быть запущен метод запуска или нет.

+0

Вы должны 'start()' Thread для того, чтобы быть живым: 'MyThread t = new MyThread(); t.isAlive(); 'возвращает 'false' – Matthieu

0

Поток считается живым с момента создания объекта Thread и запуска его до тех пор, пока он не завершит метод запуска или не умрет. Говорят, что он находится в живом состоянии, даже если он находится в состоянии ожидания, работы или сна.

0

Тема «Живой» означает, что поток все еще работает.

Да, вы можете сказать, что метод run() выполняет для Живой темы.

Кроме того, метод isAlive() используется, чтобы узнать, работает ли Thread.

final boolean isAlive() 

Метод isAlive() возвращает истину, если нить, на которой она называется по-прежнему работает.В противном случае он возвращает false.

+0

что будет возвращать isAlive, когда поток находится в состоянии ожидания? – divine

0

Нить жива, когда она находится в состоянии New или в состоянии Running/Wait. И мы также можем сказать, что до тех пор, пока нить не погибнет, она жива в памяти.

1

Нить жива после начала() возвращена и до запуска() возвращается в JVM.

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