11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
1

Объясните, как синхронизировать 2 потока

18.11.2014, 12:31. Показов 587. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.

главный поток создает 2 потока и передает им себя (this).
по завершению загрузки потоки вызывают у главного какой-то метод.

Мне соответственно нужно дождаться в этом методе обоих потоков
(первый загрузил быстрее, подождал второго, пришел второй, сказал первому, что идем дальше выполнять метод)

выполнили и опять пошли делать свою загрузку и т.д.

Здесь прошу подсказать, какими java-примитивами можно это разрулить?
Если можно, то с простеньким примером.

Добавлено через 22 минуты
Я поискал - нашел CountDownLatch, вроде подходит, только не пойму как мне ее сбрасить после первого прохода?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2014, 12:31
Ответы с готовыми решениями:

Как синхронизировать два потока?
Прочитал про synchronize(), queue(), мьютексы, семафоры, Но не могу связать в программе два потока...

Как синхронизировать между собой два потока
Привет, народ. Есть вопросик по потокам. Callback функция постоянно дёргает решатель в отдельном...

ManualResetEvent: синхронизировать три потока
static void Main(string args) { ManualResetEvent mre = new...

Объясните подробно про работу с контролом из другого потока
Здравствуйте. Не могли бы вы мне подробно и простым языком описать как производить правильное...

4
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
18.11.2014, 13:38 2
CoundDownLatch не допускает переиспользования. Или создавайте новый, или замените его на другой примитив синхронизации:
Phaser, CyclicBarrier. Они очень похожи.
1
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
18.11.2014, 17:13  [ТС] 3
спасибо,
CyclicBarrier, вроде подходит.
у меня 2 потока - для воспроизведения аудио и видео,
от только может быть такая ситуация, что аудио поток загрузил 2 дорожки, а видео еще ни одной, если просто использовать await() - "защелка" откроется, а мне нужно было дождаться видео.
как бы это разрулить?
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
18.11.2014, 17:29 4
Не понял, почему вы решили что она откроется? await() не откроется пока определенное число потоков не достигнет определенной точки. Число потоков у вас строго определено, такая ситуация не должна возникнуть.
0
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
18.11.2014, 17:35  [ТС] 5
да, все верно, это меня не туда понесло
спасибо
0
18.11.2014, 17:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2014, 17:35
Помогаю со студенческими работами здесь

Объясните тупому почему задержка потока по Sleep() больше чем ... с вызывает задержки и других потоков?
Какое отношение они имеют к данному потоку?Ну спит он себе и спит, пусть он выполняется раз в 5...

Как из потока управлять формой, если функции потока находятся в другом классе?
Добрый вечер. Возник такой вопрос, никак не могу разобраться. Как из потока управлять формой,...

VC++6.0, как из порожденного потока прочитать переменную главного потока?
Visual C++ 6.0 SP5 Простое диалоговое окно, (MFC) созданное мастером среды VC По нажатию на...

Как из одного потока узнать состояние другого потока
Подскажите пожалуйста, как из одного потока узнать, что другой поток еще не запущен. Например,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru