|
0 / 0 / 1
Регистрация: 14.02.2009
Сообщений: 470
|
|
Ожидание основной программы17.11.2006, 15:38. Показов 9860. Ответов 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
Не работает тело основной программы Задержка выполнения основной программы
Обращение к настройкам из основной программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|