поочередное исполнение двух потоков
От: b_manvelyan Украина  
Дата: 18.05.07 10:29
Оценка:
Добрый день, All.

Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
Re: поочередное исполнение двух потоков
От: b_manvelyan Украина  
Дата: 18.05.07 10:33
Оценка:
Здравствуйте, b_manvelyan, Вы писали:

_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.

Потоки, о том что возобновили исполнение должны узнать.
Re: поочередное исполнение двух потоков
От: Blazkowicz Россия  
Дата: 18.05.07 10:36
Оценка: 1 (1) +1
Здравствуйте, b_manvelyan, Вы писали:

_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.


Любопытная постановка вопроса.
1) Java concurrency tutorial
2) Изучить ключевое слово synchronized и методы Object.wait(), Object.notify()
3) После успешного изучения п2 — http://www.google.com/search?q=java.util.concurrency
Re[2]: поочередное исполнение двух потоков
От: b_manvelyan Украина  
Дата: 18.05.07 10:46
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

1) Уже.
2) В первом приближении попробовал. Получаю в том или ином виде java.lang.IllegalMonitorStateException
Exception in thread "TaskExecutor worker script" java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at mypackage.myclass.mymethod()

3) Чем и занимаюсь.
Re[3]: поочередное исполнение двух потоков
От: Blazkowicz Россия  
Дата: 18.05.07 10:53
Оценка: +1
Здравствуйте, b_manvelyan, Вы писали:

_>2) В первом приближении попробовал. Получаю в том или ином виде java.lang.IllegalMonitorStateException

_>Exception in thread "TaskExecutor worker script" java.lang.IllegalMonitorStateException: current thread not owner
_> at java.lang.Object.notify(Native Method)
_> at mypackage.myclass.mymethod()
Ненадо пробовать. Надо читать. И только потом пробовать.

_>3) Чем и занимаюсь.

А вот это тоже не стоило. Лучше для начала с предыдущим пунктом разобратся. Потому что в противном случае будешь использовать API почти не понимая что он делает.
Re[3]: поочередное исполнение двух потоков
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 18.05.07 11:07
Оценка:
Здравствуйте, b_manvelyan, Вы писали:

...
_>2) В первом приближении попробовал. Получаю в том или ином виде java.lang.IllegalMonitorStateException
_>Exception in thread "TaskExecutor worker script" java.lang.IllegalMonitorStateException: current thread not owner
_> at java.lang.Object.notify(Native Method)
_> at mypackage.myclass.mymethod()

wait()/notify(), равно как awat()/signal() должны вызываться из контекста владения монитором (из synchronized для wait()/notify(); после lock/lock() для await()/signal()).
http://denis-zhdanov.blogspot.com
Re[2]: поочередное исполнение двух потоков
От: Аноним  
Дата: 19.05.07 10:39
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, b_manvelyan, Вы писали:


_>>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.


B>Любопытная постановка вопроса.


В некоторых конторах на собеседовании просят иногда чо-нить такое написать
Re: поочередное исполнение двух потоков
От: dims12 http://www.relativity.ru
Дата: 19.05.07 14:00
Оценка:
Здравствуйте, b_manvelyan, Вы писали:

_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.


Слово synchronized, методы notify() и wait() класса Object.
Re[2]: поочередное исполнение двух потоков
От: dims12 http://www.relativity.ru
Дата: 19.05.07 14:09
Оценка: 1 (1)
Коротко перевожу.

Когда поток входит в synchronized, он "захватывает" объект (own monitor). Захватить один объект одновременно несколько потоков не могут. Поэтому, если один поток захватил объект, остальные ждут у входа в synchronized.

Если поток вызывает метод wait() того объекта, который им сейчас захвачен (иначе нельзя), то он временно отпускает объект, что сразу же даёт возможность поработать с объектом другим потокам. Сам он переходит в режим ожидания, того момента, когда ему разрешат поработать вызовом метода notify().
Re: поочередное исполнение двух потоков
От: tavr  
Дата: 21.05.07 15:27
Оценка:
Здравствуйте, b_manvelyan, Вы писали:

_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.

если одновременно выполняется только один поток, то к чему городить многопоточность?
Re[2]: поочередное исполнение двух потоков
От: b_manvelyan Украина  
Дата: 21.05.07 16:04
Оценка:
Здравствуйте, tavr, Вы писали:

T>если одновременно выполняется только один поток, то к чему городить многопоточность?

Если кратко, то необходим аналог JOptionPane в Canoo ULC. Более подробно: необходимо приостановить исполнение до ввода пользователя. ULC исполнение основного потока не останавливает. их рекомендация использовать обработчики событий, но это не всегда удобно. А два потока как один из вариантов реализации и посмотреть что из этого получится.
Re[3]: поочередное исполнение двух потоков
От: Дмитрий В  
Дата: 21.05.07 22:02
Оценка:
Здравствуйте, b_manvelyan, Вы писали:

_>Здравствуйте, tavr, Вы писали:


T>>если одновременно выполняется только один поток, то к чему городить многопоточность?

_>Если кратко, то необходим аналог JOptionPane в Canoo ULC. Более подробно: необходимо приостановить исполнение до ввода пользователя. ULC исполнение основного потока не останавливает. их рекомендация использовать обработчики событий, но это не всегда удобно. А два потока как один из вариантов реализации и посмотреть что из этого получится.
Может метод Thread.join() подойдет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.