Здравствуйте, возникла проблема
Мне нужно, чтобы во время рассылки в моем боте, другие пользователи могли его использовать, чтобы бот отвечал, поэтому необходимо поэтому необходимо реализовать асинхронность, так вот вопросы:
1) Как реализовать асихнронность в телеграм боте?
2) Есть какие-нибудь примеры.
3) Асинхронность в java делается через отдельные потоки или через что-то другое?
Спасибо за ответы)
1. Так же как и в любом другом приложении.
2. Есть. Можно загуглить "Java async". Вот первый результат: https://www.baeldung.com/java-asynchronous-programming
3. Всегда это будет отдельный поток (а как вы вообще себе представляетет асинхронное выполнение без многопоточности?!), но в современной джаве есть несколько вариантов, в которых вы вообще new Thread можете ниразу и не написать.
Я не знаком с интерфейсом телеграмма, но думаю что вам нужно создавать поток всякий раз, когда бот получает обращение от нового пользователя. И уже этот поток должен ему отвечать. По окончанию ответа поток должен сам завершаться. В это же время главный поток может продолжать принимать новые обращения.
Это наиболее простая схема асинхронной обработки, но в ней имеются недостатки. Если одновременно обращаются много пользователей, для каждого будет создан поток. Это может привести к серьёзной деградации производительности ОС или даже исчерпанию ресурсов. Эту проблему можно решить разными способами. Например, так как указал Dmitry Roo - через так называемые Future или асинхронные задачи. Но можно также использовать пул потоков и очереди. На мой взгляд решение с очередями будет более контролируемым, но и более трудоёмким и требующим опыта. Для первого шага можно использовать простую схему с созданием нового потока для каждого нового пользователя.