|
0 / 0 / 1
Регистрация: 14.02.2009
Сообщений: 470
|
|
Ожидание основной программы17.11.2006, 15:38. Показов 10062. Ответов 42
Метки нет (Все метки)
Основная программа запускает в цикле несколько потоков. Затем ей надо подождать, пока они все отработают. Как это лучше организовать?
(продолжать выполнение можно, когда статическая переменная pcount==0)
0
|
|
| 17.11.2006, 15:38 | |
|
Ответы с готовыми решениями:
42
Основной цикл, для работы программы Вызов подпрограммы из основной программы, с сохранением работоспособности основной программы?(подробно внутри) Выполнение другой программы по завершению основной программы |
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 23.11.2006, 21:11 | |
|
<STRONG>sergioK</STRONG>
<STRONG>Вы бы прокомментировали что ли свои добавления - notify() vs notifyAll(), super.run()</STRONG>
0
|
|
|
sergioK
|
|
| 24.11.2006, 14:17 | |
|
потратил пол часа на ответ попытался отправить ,
получил еrror в котором сказано смотреть лог , И это не первый раз , может какая проблема из за того что я не в России, интересно что это случается исключительно на "русских" форумах |
|
|
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
| 24.11.2006, 14:23 | |
|
печально
надо было кнопку "назад" в браузере попробоватьтакие вещи бывает случаются, и не только на relib-е, меня это тоже всегда напрягает
0
|
|
|
sergioK
|
||
| 24.11.2006, 16:58 | ||
|
Поскольку мы используем наследника от thread и за работу отвечает run то поэтому и нужен super.run у меня была ситуация где по другому не работает ,
про <STRONG>notify()</STRONG> из опыта похожего на Явы языка в описанной ситуации <STRONG>notifyAll()</STRONG> надежнее всех недовольных прошу высказаться здесь
|
||
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|||
| 24.11.2006, 18:56 | |||
Единственное, что мне известно наверняка, так это необходимость использования wait() только в цикле, где проверяется некоторый флаг. В приведенном выше коде так и сделано. Это обусловлено тем , что поток может пробудиться сам, без notify() (так называемый "spurious wakeup" ).
0
|
|||
|
sergioK
|
|
| 24.11.2006, 21:58 | |
|
кажется Я перепупал, если перегружать <STRONG>start</STRONG> то необходимо super.start() потому что имеено из него вызывается run, а super.run "пустой" точнее абстрактный его вызов ничего не даст ,
notifyAll() Я думаю правильней поскольку он освобождает все потоки согласно приоретету т,е, вроде бы есть возможность контролировать порядок , хотелось бы посмотреть код этих методов но они к cожалению Native |
|
|
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
|
|
| 29.11.2006, 15:43 | |
|
вопрос немного в сторону:
Когда на каком нить Thread-е вызываем метод join(), то там в итоге вызывается метод wait() Когда поток отрабатает, то ожидание от метода wait прекратиться. Насколько я смотрел класс Thread, - методы notify и notifyall при завершении потока не вызываются. Я сделал вывод что метод notify или notifyall вызывается внутри нативного метода start(). Хотел узнать кто что по этому поводу думает?!
0
|
|
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
| 29.11.2006, 16:18 | |
|
ННП.
2sergioK: super.run() -- не надо. Он действительно пустой (но не абстрактный!!!). Контролировать порядок пробуждения нет никакой возможности. Даже с notifyAll() =)) 2mselez: notify() вызывается только однажды (это про sleep()) -- когда обратный счетчик потоков обнулится. Используется notify(), а не notifyAll() потому, что известно, что ожидает единственный поток. 2Alexadr: notifyAll() вызывается, когда поток умирает =) Я хочу сказать, что notifyAll() точно вызывается. Могу рассказать, как это легко проверить =)) Если интересно... 2bombastik & 2mselez: Java потоки мапятся на нативные потоки. => wait() и notify(), а также sleep() -- обращение к ОС, то есть системный вызов. И системные же очереди. Именно это я и подразумевал, когда рассуждал о sleep() vs. wait()/notify().
0
|
|
|
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
|
||
| 29.11.2006, 19:00 | ||
0
|
||
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
||||||
| 29.11.2006, 19:12 | ||||||
|
О4. просто =))
0
|
||||||
|
Ghost
|
|
| 29.11.2006, 20:17 | |
|
Уфффф... старый я стал )
В свое время, когда писал на C++ под Windows, помню, там были шикарные функции WaitForSingleObject / WaitForMultiplyObjects. Их аналогов под Java, часом, нету? |
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
||
| 29.11.2006, 20:47 | ||
))
0
|
||
|
paradise
|
||
| 29.11.2006, 22:23 | ||
|
||
|
mishgun
|
||
| 30.11.2006, 00:43 | ||
Da prosto narod upersya v wait ()i notify() i dalshe dumat ne hochet. A ved sushestvuet ThreadGroup ili thread.yield() kotorie bolshe podhodyat k tomu chto napeysal afftar v samom pervom poste. Dano Main Thread kotoriy zapuskaet ostalnie threads i zhdet poka oni zakonchat rabotat. Solutions: 1.ThreadGroup 2. thread.yeild() 3.wait()- notify() |
||
|
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
|
||
| 30.11.2006, 15:08 | ||
Однако если даже не верить примеру который привел Danissimo(хотя все там работает правильно), то можно посмотреть и проанализировать работу метода join(). Похоже что где-то в конце кода нативного метода start() происходит вызов нативного метода notifyAll(), - ессно нам это не видно...
0
|
||
|
paradise
|
||
| 30.11.2006, 17:05 | ||
При чем тут метод start()? Он неблокирующий. Ты его вызвал, поток запустился и работает два дня. По твоему, notifyAll() будет вызвано сразу после вызова start()? Или через два дня? Это похоже на hack со стороны реализации. Я бы не стал на это закладываться. Логика работы join() может измениться и notifyAll() перестанет вызываться. Код не будет работать. |
||
|
paradise
|
|||
| 30.11.2006, 17:14 | |||
Закладываетесь на реализацию. В линуксе потоки JVM могут мэпиться на pthreads например. Все это зависит от реализации. Если что-то используешь, надо понимать, как это работает. Для меня главное отличие sleep() от wait() - работа с замками. В ситуации, описанной автором вопроса join лучше всего подходит. |
|||
|
0 / 0 / 2
Регистрация: 30.06.2011
Сообщений: 173
|
|
| 30.11.2006, 20:18 | |
|
2 paradise
Согласен с тем, что в по теме автору лучше всего юзать метод join() (даже если несколько потоков) А по поводу изменения логики работы метода join(), - думаю что она меняться не будет, а вот этот hack, когда дергается notifyAll() после того как отработает метод run(), может и будет заспецифицирован.
0
|
|
|
paradise
|
|
| 30.11.2006, 21:42 | |
|
А может и не будет.
|
|
| 30.11.2006, 21:42 | |
|
Не работает тело основной программы Задержка выполнения основной программы
Обращение к настройкам из основной программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|