У меня следующая проблема:Как ждать нескольких слушателей с тайм-аут
Основной поток запускает код (который вызывается несколько раз, каждый второй) моего приложения, и в какой-то момент он уведомляет список слушателей перед выполнением определенного действия. Затем слушатели выполняют действия для сбора данных из внешнего источника, некоторые из этих действий требуют много времени.
Теперь, с одной стороны, я хочу дать каждому слушателю возможность выполнить его работу до того, как я продолжу работу основного потока (поскольку данные могут быть потеряны или изменены после выполнения действия), а также другой рукой мне нужно ограничить весь процесс уведомления-сбора до определенного таймаута, чтобы поддерживать разумный поток действий.
В любом случае, я хочу, чтобы любой слушатель не успел закончить работу, чтобы продолжить.
Некоторые примеры кода:
public class ExampleTimeoutNotifier {
private static ArrayList<ExampleTimeoutNotifierListener> listeners;
private static int timeOutInMillis;
public static void main(String[] args) {
timeOutInMillis = Integer.parseInt(args[0]);
// ... the following code is being called repeatedly on the main thread:
// How to limit the process timeout?
for (ExampleTimeoutNotifierListener l : listeners) {
l.collectBeforeAction();
}
// Do the action...
}
public interface ExampleTimeoutNotifierListener {
public void collectBeforeAction();
}
}
может быть, вы должны смотреть в синхронизируются, если я понял, что вы имеете в виду. здесь http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html – CME64
@ CME64 вы можете объяснить, как это может помочь? У меня нет проблем с параллелизмом, и я не хочу блокировать какой-либо объект или данные. – Elist
Вот что я понял из вашего утверждения «Я хочу дать каждому слушателю возможность выполнить его работу, прежде чем я продолжу работу основного потока (потому что данные могут быть потеряны или изменены после того, как действие будет выполнено)« исправьте меня, если Я ошибаюсь – CME64