﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / Java  / Ожидание основной программы / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Wed, 08 Oct 2008 12:10:12 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Danissimo (04.12.2006)[/b]&lt;br&gt;И не надо полагаться! Этот код просто напросто удостоверяет, что notifyAll() вызывается. Не более.&lt;br&gt;[/quote]&lt;br&gt;Ок.&lt;br&gt;[quote][b]Danissimo (04.12.2006)[/b]&lt;br&gt;[quote][b]boombastik (30.11.2006)[/b][hr]изучив пакет java.util.concurrent, я бы еще раз подумал на тему: какие возможности предоставляет современная Java API.[/quote]&lt;br&gt;Подписываюсь под каждой буквой.&lt;br&gt;[/quote]&lt;br&gt;&lt;br&gt;Согласен, если Java 5.</description><pubDate>Mon, 04 Dec 2006 13:55:48 GMT</pubDate><dc:creator>paradise</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Ghost (29.11.2006)[/b][hr]В свое время, когда писал на C++ под Windows, помню, там были шикарные функции WaitForSingleObject / WaitForMultiplyObjects. Их аналогов под Java, часом, нету?[/quote]&lt;br&gt;Есть. java.util.concurrent.Semaphore, например.&lt;br&gt;&lt;br&gt;[quote][b]paradise	 (29.11.2006)[/b][hr]Давай ссылку на спеку. Иначе это хак, на который нельзя полагаться.[/quote]&lt;br&gt;И не надо полагаться! Этот код просто напросто удостоверяет, что notifyAll() вызывается. Не более.&lt;br&gt;&lt;br&gt;[quote][b]mishgun (29.11.2006)[/b][hr]Da prosto narod upersya v wait ()i notify() i dalshe dumat ne hochet.&lt;br&gt;A ved sushestvuet ThreadGroup ili thread.yield() kotorie bolshe podhodyat k tomu chto napeysal afftar v samom pervom poste.&lt;br&gt;Dano Main Thread kotoriy zapuskaet ostalnie threads i zhdet poka oni zakonchat rabotat.&lt;br&gt;Solutions:&lt;br&gt;1.ThreadGroup&lt;br&gt;2. thread.yeild()&lt;br&gt;3.wait()- notify()[/quote]&lt;br&gt;mishgun, я бы хотел увидеть код для ThreadGroup. Можешь продемонстрировать?&lt;br&gt;&lt;br&gt;[quote][b]Alexadr (30.11.2006)[/b][hr]Согласен с тем, что в по теме автору лучше всего юзать метод join() (даже если несколько потоков)[/quote]&lt;br&gt;Alexadr, покажи, пожалуйста, как. Поделись опытом.&lt;br&gt;&lt;br&gt;[quote][b]boombastik (30.11.2006)[/b][hr]изучив пакет java.util.concurrent, я бы еще раз подумал на тему: какие возможности предоставляет современная Java API.[/quote]&lt;br&gt;Подписываюсь под каждой буквой.</description><pubDate>Mon, 04 Dec 2006 13:47:39 GMT</pubDate><dc:creator>Danissimo</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>не отрицаю, что можно использовать join, но хотелось бы увидеть пример логики работы приложения в данном случае, если не сложно?&lt;/P&gt;&lt;P&gt;изучив пакет &lt;FONT size=2&gt;java.util.concurrent, я бы еще раз подумал на тему: какие возможности предоставляет современная Java API.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;С уважением,&lt;BR&gt;Владимир</description><pubDate>Thu, 30 Nov 2006 23:03:41 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>А может и не будет.</description><pubDate>Thu, 30 Nov 2006 18:42:28 GMT</pubDate><dc:creator>paradise</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>2 paradise&lt;BR&gt;Согласен с тем, что в по теме автору лучше всего юзать метод join() (даже если несколько потоков)&lt;/P&gt;&lt;P&gt;А по поводу изменения логики работы метода join(), - думаю что она меняться не будет, а вот этот hack, когда дергается notifyAll() после того как отработает метод run(), может и будет заспецифицирован.</description><pubDate>Thu, 30 Nov 2006 17:18:51 GMT</pubDate><dc:creator>Alexadr</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Danissimo (29.11.2006)[/b]&lt;br&gt;super.run() -- не надо. Он действительно пустой (но не абстрактный!!!).&lt;br&gt;Контролировать порядок пробуждения нет никакой возможности. Даже с notifyAll() =))&lt;br&gt;[/quote]&lt;br&gt;Поддерживаю.&lt;br&gt;&lt;br&gt;[quote][b]Danissimo (29.11.2006)[/b]&lt;br&gt;2bombastik &amp; 2mselez:&lt;br&gt;Java потоки мапятся на нативные потоки. =&gt; wait() и notify(), а также sleep() -- обращение к ОС, то есть системный вызов. И системные же очереди. Именно это я и подразумевал, когда рассуждал о sleep() vs. wait()/notify().[/quote]&lt;br&gt;&lt;br&gt;Закладываетесь на реализацию. В линуксе потоки JVM могут мэпиться на pthreads например. Все это зависит от реализации.&lt;br&gt;&lt;br&gt;Если что-то используешь, надо понимать, как это работает. Для меня главное отличие sleep() от wait() - работа с замками.&lt;br&gt;&lt;br&gt;В ситуации, описанной автором вопроса join лучше всего подходит.</description><pubDate>Thu, 30 Nov 2006 14:14:26 GMT</pubDate><dc:creator>paradise</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Alexadr (30.11.2006)[/b]&lt;br&gt;Однако если даже не верить примеру который привел [b]Danissimo[/b](хотя все там работает правильно), то можно посмотреть и проанализировать работу метода join().&lt;br&gt;Похоже что где-то в конце кода нативного метода start() происходит вызов нативного метода notifyAll(), - ессно нам это не видно...[/quote]&lt;br&gt;&lt;br&gt;При чем тут метод start()? Он неблокирующий. Ты его вызвал, поток запустился и работает два дня. По твоему, notifyAll() будет вызвано сразу после вызова start()? Или через два дня?&lt;br&gt;&lt;br&gt;Это похоже на hack со стороны реализации. Я бы не стал на это закладываться. Логика работы join() может измениться и notifyAll() перестанет вызываться. Код не будет работать.</description><pubDate>Thu, 30 Nov 2006 14:05:29 GMT</pubDate><dc:creator>paradise</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]paradise (29.11.2006)[/b][hr][quote][b]Danissimo (29.11.2006)[/b][hr]О4. просто =))&lt;BR&gt;&lt;BR&gt;Thread t = new Thread() {&lt;BR&gt;public void run() {&lt;BR&gt;try {&lt;BR&gt;sleep(1000);&lt;BR&gt;} catch (InterruptedException ignore) {}&lt;BR&gt;System.out.println("FINISHED");&lt;BR&gt;}&lt;BR&gt;};&lt;BR&gt;t.start();&lt;BR&gt;System.out.println("WATING");&lt;BR&gt;synchronized(t) {&lt;BR&gt;while (t.isAlive())&lt;BR&gt;t.wait();&lt;BR&gt;}&lt;BR&gt;System.out.println("NOTIFIED");&lt;BR&gt;&lt;BR&gt;NOTIFIED будет напечатано ВСЕГДА после FINISHED.[/quote]&lt;BR&gt;&lt;BR&gt;Давай ссылку на спеку. Иначе это хак, на который нельзя полагаться.[/quote]&lt;P&gt;В том то и дело что в спецификациях я на эту тему ничего не нашел!!!&lt;/P&gt;&lt;P&gt;Однако если даже не верить примеру который привел [b]Danissimo[/b](хотя все там работает правильно), то можно посмотреть и проанализировать работу метода join().&lt;BR&gt;Похоже что где-то в конце кода нативного метода start() происходит вызов нативного метода notifyAll(), - ессно нам это не видно...</description><pubDate>Thu, 30 Nov 2006 12:08:26 GMT</pubDate><dc:creator>Alexadr</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Ghost (29.11.2006)[/b][hr]Уфффф... старый я стал )&lt;br&gt;&lt;br&gt;В свое время, когда писал на C++ под Windows, помню, там были шикарные функции WaitForSingleObject / WaitForMultiplyObjects. Их аналогов под Java, часом, нету?[/quote]&lt;br&gt;&lt;br&gt;Da prosto narod upersya v wait ()i notify() i dalshe dumat ne hochet.&lt;br&gt;A ved sushestvuet ThreadGroup ili thread.yield() kotorie bolshe podhodyat k tomu chto napeysal afftar v samom pervom poste.&lt;br&gt;Dano Main Thread kotoriy zapuskaet ostalnie threads i zhdet poka oni zakonchat rabotat.&lt;br&gt;Solutions:&lt;br&gt;1.ThreadGroup&lt;br&gt;2. thread.yeild()&lt;br&gt;3.wait()- notify()</description><pubDate>Wed, 29 Nov 2006 21:43:02 GMT</pubDate><dc:creator>mishgun</dc:creator></item><item><title>RE: Ожидание основной программы</title><link>http://www.relib.com/forums/Topic907663-5-1.aspx</link><description>[quote][b]Danissimo (29.11.2006)[/b][hr]О4. просто =))&lt;br&gt;&lt;br&gt;Thread t = new Thread() {&lt;br&gt;    public void run() {&lt;br&gt;        try {&lt;br&gt;            sleep(1000);&lt;br&gt;        } catch (InterruptedException ignore) {}&lt;br&gt;        System.out.println("FINISHED");&lt;br&gt;    }&lt;br&gt;};&lt;br&gt;t.start();&lt;br&gt;System.out.println("WATING");&lt;br&gt;synchronized(t) {&lt;br&gt;    while (t.isAlive())&lt;br&gt;        t.wait();&lt;br&gt;}&lt;br&gt;System.out.println("NOTIFIED");&lt;br&gt;&lt;br&gt;NOTIFIED будет напечатано ВСЕГДА после FINISHED.[/quote]&lt;br&gt;&lt;br&gt;Давай ссылку на спеку. Иначе это хак, на который нельзя полагаться.</description><pubDate>Wed, 29 Nov 2006 19:23:23 GMT</pubDate><dc:creator>paradise</dc:creator></item></channel></rss>