|
0 / 0 / 1
Регистрация: 14.02.2009
Сообщений: 470
|
|
Ожидание основной программы17.11.2006, 15:38. Показов 9925. Ответов 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 | |
|
Помогаю со студенческими работами здесь
40
Не работает тело основной программы Задержка выполнения основной программы
Обращение к настройкам из основной программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|