Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
Здравствуйте, b_manvelyan, Вы писали:
_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
Потоки, о том что возобновили исполнение должны узнать.
Здравствуйте, b_manvelyan, Вы писали:
_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
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()
Здравствуйте, 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 почти не понимая что он делает.
... _>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()).
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, b_manvelyan, Вы писали:
_>>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
B>Любопытная постановка вопроса.
В некоторых конторах на собеседовании просят иногда чо-нить такое написать
Здравствуйте, b_manvelyan, Вы писали:
_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
Слово synchronized, методы notify() и wait() класса Object.
Когда поток входит в synchronized, он "захватывает" объект (own monitor). Захватить один объект одновременно несколько потоков не могут. Поэтому, если один поток захватил объект, остальные ждут у входа в synchronized.
Если поток вызывает метод wait() того объекта, который им сейчас захвачен (иначе нельзя), то он временно отпускает объект, что сразу же даёт возможность поработать с объектом другим потокам. Сам он переходит в режим ожидания, того момента, когда ему разрешат поработать вызовом метода notify().
Здравствуйте, b_manvelyan, Вы писали:
_>Подскажите каким образом можно организовать поочередное исполнение двух потоков. т.е когда первый поток выполняется, второй ожидает и наоборот. или где можно посмотреть такую схему.
если одновременно выполняется только один поток, то к чему городить многопоточность?
Здравствуйте, tavr, Вы писали:
T>если одновременно выполняется только один поток, то к чему городить многопоточность?
Если кратко, то необходим аналог JOptionPane в Canoo ULC. Более подробно: необходимо приостановить исполнение до ввода пользователя. ULC исполнение основного потока не останавливает. их рекомендация использовать обработчики событий, но это не всегда удобно. А два потока как один из вариантов реализации и посмотреть что из этого получится.
Здравствуйте, b_manvelyan, Вы писали:
_>Здравствуйте, tavr, Вы писали:
T>>если одновременно выполняется только один поток, то к чему городить многопоточность? _>Если кратко, то необходим аналог JOptionPane в Canoo ULC. Более подробно: необходимо приостановить исполнение до ввода пользователя. ULC исполнение основного потока не останавливает. их рекомендация использовать обработчики событий, но это не всегда удобно. А два потока как один из вариантов реализации и посмотреть что из этого получится.
Может метод Thread.join() подойдет?