| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > что это за конструкция? |
| Автор: Корнелиус 9.2.2006, 14:49 | ||
Что это за конструкция?
Непонятно... вроде, создает... и описывает в то же время |
| Автор: aefimov 9.2.2006, 14:54 | ||
| Обычный аннонимный inner class. И это не правильная конструкция. Совсем правильная вот такая:
Методы самого треда лучше не перегружать. |
| Автор: LSD 9.2.2006, 14:54 | ||||||
Эта конструкция создает анонимный класс унаследованный от Thread
Здесь переопределяется метод run() класса Thread.
Здесь у вновь созданного объекта вызывается метод start()
P.S. Лучше такой код не писать. |
| Автор: Beard 9.2.2006, 14:55 |
| Анонимный класс. по сути это class MyThread extends Thread { public void run() { o.one(); } } ... new MyThread().start() |
| Автор: Корнелиус 9.2.2006, 15:04 | ||
Забавно, это пример из туториала )
Объясните, плз, что значит "даем время отработать потокам"? sleep их разве не приостанавливает просто? Или, пока один стоит, другой работает, а потом они меняются? |
| Автор: batigoal 9.2.2006, 15:08 |
| Просто освобождаем ресурсы для других потоков. Так мы не завесим все нафиг своими циклами. |
| Автор: Корнелиус 9.2.2006, 15:23 | ||
То есть, я так понимаю, один поток спит - второй работает. Но потом же они должны местами поменяться. А sleep один раз только вызывается. И то не очень понятно у кого именно:
|
| Автор: LSD 9.2.2006, 15:46 | ||
| Нет, потоки работают одновременно. Вернее одновременно они работают на многопроцессорной системе, а на однопроцессорной просто постоянно происходит переключение между ними. Для программиста все выглядит так, как будто потоки работают одновременно.
Он вызывается для текущего потока, т.е. в твоем случае это main - основной поток выполнения программы, его создает JVM при запуске приложения. |
| Автор: Корнелиус 9.2.2006, 16:08 | ||
Подзапутался я... А как же эти два: " // Запускаем первый поток, который // вызывает один метод .... // Запускаем второй поток, который // вызывает второй метод ..." Это что не потоки? Зачем их создавать, а sleep() у main звать? Или они - подпотоки? Если можно, подробнее |
| Автор: LSD 9.2.2006, 16:26 | ||
Это тоже потоки. Там просто создается еще два потока и запускаются. После этого в твоей программе будет 3 потока (вернее их будет больше, но остальные служебные и тебе без надобности). Когда поток создан и запущен, он становится полностью самостоятельным, можешь считать что он получил в свое распоряжение отдельный процессор и выполняется на нем. А sleep() вызывается затем, чтобы на время приостановить поток main, и пока он будет стоять два созданнхы ранее потока успели отработать (они то работают независимо от main-а). Пока поток main спит они успевают вызвать методы one() и two(). Поток main не обязан ждать пока отработают два других потока, но ему нужны результаты их работы, поэтому он ждет. |
| Автор: Корнелиус 9.2.2006, 16:33 |
| О! Наконец то я въехал. Большое спасибо! |