powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Цикл и асинхронные запросы
17 сообщений из 17, страница 1 из 1
Цикл и асинхронные запросы
    #37883191
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть цикл от 1 до N
Некоторые шаги посылают запрос на сервер и по ответу, надо сделать действия. Те которые не посылают, либо по-умолчанию либо ничего. Очередность ответов разная - 5 может придти быстрее чем 2 образно говоря.

Вопрос - как узнать, что пришли все ответы и дальше вызвать нужный метод обработки данных
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883192
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-Есть цикл от 1 до N
Некоторые шаги посылают запрос на сервер и по ответу, надо сделать действия. Те которые не посылают, либо по-умолчанию либо ничего. Очередность ответов разная - 5 может придти быстрее чем 2 образно говоря.

Вопрос - как узнать, что пришли все ответы и дальше вызвать нужный метод обработки данных

Цикл тут for, но могут быть совершенно разные
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883230
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, накапливать ответы в буфер.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883244
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНу, накапливать ответы в буфер.
И сколько копить их?
И как узнать, что все накопилось?

Образно
Код: java
1.
2.
sendAllData(); //цикл посылающий запросы
preparedData(); //должен вызвать когда пришли все ответы



Можно конечно анализ проводить в самом ответе, но...
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883256
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приблизительно вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
void runLoop(){
for(...){
  sendAsync();
  expectedResponses++;
}

synchronized(buffer){
  while(buffer.size() <= expectedResponses){
    buffer.wait();
  }
}

process(buffer);

}


void onAsyncResponse(Response r){
  synchronized(buffer){
    buffer.add(r);
  }
 buffer.notifyAll();
}
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883279
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПриблизительно вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
void runLoop(){
for(...){
  sendAsync();
  expectedResponses++;
}

synchronized(buffer){
  while(buffer.size() <= expectedResponses){
    buffer.wait();
  }
}

process(buffer);

}


void onAsyncResponse(Response r){
  synchronized(buffer){
    buffer.add(r);
  }
 buffer.notifyAll();
}



Ок идея понятна, спасибо сейчас опробую
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883284
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только там = лишнее. должно быть просто <
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883289
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И со скобками я промазал. notifyAll должен быть внутри synchronized блока.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883354
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883578
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем wait/notify?
Есть же CyclicBarrier
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883591
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть CountDownLatch . Может он лучше подойдет.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883595
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerЗачем wait/notify?
Есть же CyclicBarrier
Не могу представить как его здесь прикрутить, да ещё и при условии, что кол-во асинхронных задач может быть меньше чем итераций в цикле.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883605
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет требования обрабатывать результат в том же потоке, который инициирует цикл, то можно вообще через атомарный счетчик разрулить, так будет даже проще. Проблема только в том, чтобы дождаться конца цикла.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883644
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczfixxerЗачем wait/notify?
Есть же CyclicBarrier
Не могу представить как его здесь прикрутить, да ещё и при условии, что кол-во асинхронных задач может быть меньше чем итераций в цикле.

Да, скорее CountDownLatch подойдет

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
new CountDownLatch(N);

void runLoop() {
for(1..N) {
  sendAsync();
}

latch.await();

void onAsyncResponse(Response r){
 latch.countDown();
}
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883666
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerДа, скорее CountDownLatch подойдет


Из постановки задачи N заранее не извесно:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
new CountDownLatch(N);

void runLoop() {
for(1..N) {
  if(condition) {
    sendAsync();
  }
}

latch.await();

void onAsyncResponse(Response r){
 latch.countDown();
}



Хотя это решается проходом в два раза, но всё же.
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883727
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczfixxerДа, скорее CountDownLatch подойдет


Из постановки задачи N заранее не извесно:
Хотя это решается проходом в два раза, но всё же.

Известно максимальное значение N, этого достаточно. Если асинхронного запроса не нужно для шага, сразу делаем countDown().
...
Рейтинг: 0 / 0
Цикл и асинхронные запросы
    #37883774
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerИзвестно максимальное значение N, этого достаточно. Если асинхронного запроса не нужно для шага, сразу делаем countDown().
Логично. Не подумал.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Цикл и асинхронные запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]