Я пишу проект Java, в котором пользователь может сразу отправить несколько запросов, и они одновременно отправляются для обработки на одном из моих серверов.Параллельная обработка удаленных данных
Чтобы проиллюстрировать это, допустим, пользователь вводит несколько номеров счетов одновременно. Программа должна отправлять каждый из этих номеров счета на мой сервер и ждать результатов обработки. Когда каждый результат возвращается сервером, программа обновляет Java Swing JList, чтобы показать эти результаты пользователю.
Так, скажем, пользователь входит:
00001
00002
00003
00004
Программа будет затем одновременно направить 4 различных запросов к:
http://example.com/process_account.php?accountNumber=00001
http://example.com/process_account.php?accountNumber=00002
http://example.com/process_account.php?accountNumber=00003
http://example.com/process_account.php?accountNumber=00004
Результаты затем будут отображаться пользователю в jlist_AccountResults
как сервер завершает их. Таким образом, сервер может вернуть: 43
на счет 00004
запрос; 12
- на счет 00002
запрос; 36
- на счет 00001
запрос; и 29
на счет 00003
запрос. Таким образом, результат будет что-то вроде:
Account 00004: 43
Account 00002: 12
Account 00001: 36
Account 00003: 29
Ключевым моментом здесь является то, что, что результаты отображаются как только они становятся доступными и обработки одновременно, а не последовательно.
В настоящее время программа может последовательно обрабатывать несколько запросов, но когда список запросов довольно длинен, обработка может занять очень много времени. Конечно, общее время обработки растет с увеличением количества запросов, но если, например, программа может обрабатывать 4 запроса за раз, это резко сократит общее время.
Чтобы справиться с этим, я изучал использование многопоточности или ExecutorService, но мне хотелось бы услышать некоторые альтернативные идеи. Если кто-нибудь может предоставить примеры или ссылки на примеры, которые справятся с аналогичными проблемами, это будет очень признательно.
Заранее спасибо.
Исполнитель * является * многопоточным, за исключением того, что он управляет всеми волосатыми деталями и позволяет вам отправлять задания на него. Это почти всегда путь (хотя более крупные рамки, такие как Spring, могут дополнительно абстрагировать некоторые из асинхронных логик для вас). – chrylis