#java #multithreading #udp
#java #Многопоточность #udp
Вопрос:
Как реализовать поток, который обрабатывает клиентские запросы на сервере с использованием UDP. Я где-то читал, что вы можете использовать ThreadPoolExecutor, использует ли этот метод нормально. Потому что в Интернете не так много статей, которые дают вам какие-либо примеры использования многопоточных UDP-приложений. Итак, мой вопрос в том, должен ли я использовать ThreadPoolExecutor? Есть ли у кого-нибудь пример того, как реализовать многопоточное UDP-серверное / клиентское приложение?
Это просто сделать с помощью TCP, поэтому я использовал многопоточность TCP, просто хотел понять, как работает UDP таким образом.
Ответ №1:
Дело в том, что исполнители здесь вообще не проблема. Не имеет значения, используете ли вы для этого ThreadPoolExecutor или используете ручные потоки. ThreadPoolExecutor или любой другой ExecutorService, если на то пошло, — это просто служба для управления потоками и соответствующей работы. Это не имеет никакого отношения к тому, что такое ваши RUnnable или Callable.
В вашей программе вы будете предоставлять исполняемым или вызываемым только исполнителю. ExecutorService не заботится о том, что находится внутри runnable, потому что его работа заключается в их выполнении. Таким образом, способ использования ExecutorService для TCP-сервера или UDP-сервера не меняется при работе с ThreadPoolExecutor. Просто измените RUnnable для отправки и все готово 🙂
Ответ №2:
Главный трюк с UDP заключается в том, что он ненадежен. Вы должны реализовать собственное обнаружение / обработку потерянных пакетов.
Как только у вас появятся запросы, вы можете использовать Executors.newXxxxxx() точно так же, как TCP.
Комментарии:
1. Привет, Питер, я действительно не возражаю, если пакеты будут потеряны. Могу ли я по-прежнему использовать ThreadPoolExector?
2. Executors — это вспомогательный класс для ThreadPoolExecutor. Вы можете использовать любой из них, но я бы использовал исполнителей, если сможете.