Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Thread


Автор: Samotnik 15.6.2007, 16:34
Добрый день!!!
Вобщем работал с потоками, все круто, понятно, только вот заинтересовало следущее.
Чем отличаются запись
Код

Thread t;
t = new Thread();

от 
Код

Thread t;
t = new Thread(this);

 smile    ?????
подскажите плз кто знает!!!

Пэ.Эс.
Ну вобщем интуитивно я догадываюсь, что this это ссылка на текущий обьект потока, но хотелось бы так сказать по-подробнее!!!!!

Автор: LSD 15.6.2007, 16:41
Вообще-то this это должен быть объект типа Runnable, метод run() которого и будет выполняться в данном потоке.

Автор: Samotnik 15.6.2007, 16:46
Т.е.
получается в первом случае был просто создан поток, а во втором, после создания. Этот поток метод run  запускает ????   Т.е. мало того что он создался, так он еще и запустился так что ли??

Автор: EvgenZ 15.6.2007, 17:20
Выполняться поток начнет после 
Код

Thread t;
t = new Thread(this);
t.start();  //вот тут он начнет выполняться

вообще t.start(); выполняет метод public void run(){}

Добавлено через 2 минуты и 56 секунд
Передача this в качестве параметра сообщает потоку, что надо чтобы новый поток на this объекте вызывал метод run() .

Автор: EvgenZ 15.6.2007, 17:50
Т.е. если без this, то рождается новый поток, а если указать this, то рождается дочерний поток от текущего. Если указан this, то у рожденного потока приоритет станет, как у родителя, а если без, то 5.

З.Ы. вроде бы так.

Автор: Samotnik 15.6.2007, 23:27
Как я понял, в конечном счете, все сводиться к тому, чтоthis  указатель, в данном случае нужен, только для того, чтобы определить какой обьект от какого потока рождаться будет ? так,  и больше не на что не влияет??

Пэ.Эс.
Ща попробую по другому протестить!!!

Автор: s8e8r8g8e 16.6.2007, 08:40
с this это возможно что-то осмысленное ещё будет, а вот 1й вариант это вобще пустое место, которое не совсем счас понимаю для чего может сгодится

Автор: LSD 16.6.2007, 09:13
Цитата(Samotnik @  15.6.2007,  17:46 Найти цитируемый пост)
получается в первом случае был просто создан поток, а во втором, после создания. Этот поток метод run  запускает ????   Т.е. мало того что он создался, так он еще и запустился так что ли??

Чтобы выполнить некий код в отдельном потоке, надо: или унаследовать свой класс от Thread и переопределить метод run(), или в своем классе имплементировать интерфейс Runnable и в методе run() выполнить необходимые действия.
Посему: первый код бесмысленный полностью, второй осмысленен только если this указывает на объект имплементирующий Runnable.

Автор: Samotnik 16.6.2007, 14:58
2 LSD
 smile 
Спасибо большое, как обычно вы на высоте, офигенно понятно и доступно, паибо еще раз  smile  !!

Добавлено через 3 минуты и 18 секунд
Забыл....
тему закрываю!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)