Я работаю над проектом, в котором у меня будут разные Связки. Возьмем пример. Предположим, у меня есть 5 пачек, и каждый из этих пучков будет иметь имя метода process
.Задержка потока, если какой-либо комплект занимает много времени
В настоящее время я звоню process method
из всех этих 5 пакетов последовательно, один за другим, а затем я пишу в базу данных. Но этого я не хочу.
- Мне нужно вызвать все эти 5 пачек
process method
параллельно, используя многопоточность, а затем записать в базу данных. - И я также хочу иметь некоторую функцию тайм-аута для этих потоков. У меня будут настройки тайм-аута по умолчанию для всех потоков для пакетов. Если какой-либо пакет занимает несколько больше времени, чем настройки тайм-аута, которые у меня есть, то я хочу, чтобы тайм-аут этих потоков, а затем вернулся, заявив, что этот пакет получил тайм-аут bcoz, на это уходило много времени.
Я надеюсь, что вопрос достаточно ясен ...
Ниже приведен код, я до сих пор, который вызова метода процесс последовательно один за другим.
public void processEvents(final Map<String, Object> eventData) {
final Map<String, String> outputs = (Map<String, String>)eventData.get(BConstants.EVENT_HOLDER);
for (final BundleRegistration.BundlesHolderEntry entry : BundleRegistration.getInstance()) {
final Map<String, String> response = entry.getPlugin().process(outputs);
// write to the database.
System.out.println(response);
}
}
Я не уверен, что является лучшим и эффективным способом для этого? Потому что в будущем возможно, что у меня будет более 5 пакетов.
Может ли кто-нибудь предоставить мне пример того, как я могу это достичь? Любая помощь будет оценена по этому поводу. Благодарю.
Один быстрый вопрос по этому вопросу. Метод 'processEvents' будет получать каждый раз для любых новых событий. Итак, внутри этого метода я буду создавать потоки каждый раз, используя ExecutorService так же, как вы это делали? – ferhan
И в этом случае тайм-аут специфичен для каждого потока, то есть, если у меня есть 2 пакета, то тот поток, который выполняет пакет-A, получит тайм-аут, если он не сможет обработать этот период времени правильно? – ferhan
Да, каждый раз, когда processEvents называется, он будет порождать новые потоки (макс. 5 в текущем имплементе) и ждать их завершения или таймаута. Если 'processEvents' вызывается из другого потока до того, как предыдущий был закончен, они также будут работать одновременно. – Steinar