Блокирование (поток на соединение) против неблокирования (селекторы + каналы в неблокирующем режиме) и планирование задач являются ортогональными.
Режим блокировки ввода-вывода заключается в том, как ваши потоки взаимодействуют с сокетами один разони были настроены относительно пропускной способности, задержки, параллелизма, а также сложности кода.Блокировка ввода-вывода относительно проста и может легко обеспечить высокую пропускную способность.Неблокирующий ввод-вывод (по крайней мере, java.nio
без поддержки аннотаций, которые его упрощают) может быть довольно сложным, но может обрабатывать больше соединений параллельно, не разрушая счетчик потоков вашего процесса.
С другой стороны, планирование задачдля разработки логики приложения до того, как произойдет ввод-вывод, например, решение отложить задачу на час до открытия следующего соединения, без необходимости выделять весь поток только на сон в течение часа.
Поскольку вы, вероятно, толькодля обработки нескольких HTTP-подключений одновременно блокируется ввод-вывод, то есть простого HTTP-клиента, такого как HttpURLConnection
, может быть вполне достаточно.Но если вы используете Java 11 или более позднюю версию, вы также можете использовать java.net.http.HttpClient
API, который использует NIO под капотом, справляясь с большей частью сложности для вас.В любом случае отсрочка следующего объявления может быть сделана либо через Timer
, либо через ScheduledExecutorService
.