У меня есть процесс, который представляет несколько задач в ExecutorService, например MyTask. Моя задача запрашивает значение из внешней службы, например ExternalService. То, что я пытаюсь сделать, это то, что для ExternalService в пакетном процессе запросы, говорят, каждый 100 входящий или 1 раз в секунду, и до этого времени, чтобы нити MyTask быть отложено, пока они не получат ответ:Несколько потоков ждут пакетной работы
public class MyTask implements Runnable {
@Override
public void run() {
try {
// .... code ....
ExternalData data = externalService.getData(id);
// ..... code after batch ...
}catch (Exception e){
}
}
}
Мне нужно обслуживание externalService положить на удержание MyTask до тех пор, пока он не выполнит свою работу в пакетном режиме (путем накопления 100 запросов или ожидания в течение 1 сек.) И верните результат для продолжения задачи.
Каков наилучший способ решения этой проблемы?
Спасибо
Это прекрасная функция, о которой я не знал, поэтому, если мой externalservice - это действие, которое я передаю циклическому барьеру, как все потоки будут принимать результат выполнения и продолжить? у каждого будет другой идентификатор, Еще раз спасибо – tbo
@tbo Действие будет оберткой вокруг вашей службы, которая также обрабатывает идентификаторы и ответ. Я добавил пример. Я думаю, что этот подход должен работать в основном, но я уверен, что он все еще не хватает некоторых вещей, а также требует тщательной обработки ошибок. – Kapep
На этом этапе я думаю, что этот подход действительно близок к тому, что я пытаюсь сделать, я бы предпочел не выполнять мой код на catch, так как если будет достигнут срок ожидания, генерируется TimeoutException и действие не выполняется, а другие потоки получаются исключение breakBarrier, сказав, что я должен поймать исключения и действовать соответственно для достижения моего сценария – tbo