По сути, асинхронное поведение достигается с потоками, это не обходится.
Однако в среде Java EE считается плохой практикой открывать потоки самостоятельно. Скорее всего, вы захотите использовать возможности вашего сервера, которые предоставят вам (должным образом) управляемую среду для выполнения асинхронных операций.
JMS - это один из способов выполнения асинхронных задач, я бы порекомендовал его для потоков задач, которые должны непрерывно обрабатываться. Большинство серверов приложений Java имеют диспетчеры планирования, которые позволяют планировать отдельные задачи в будущем (например, с помощью кварца). Некоторые платформы также поддерживают аннотации Java EE 6 для @javax.ejb.Asynchronous
.
И да, если нужно, вы всегда можете просто создать один Thread
и забыть обо всем этом. Просто убедитесь, что вы знаете, что делаете.
Все сводится к тому, каков ваш конкретный вариант использования и какие методы поддерживает ваша среда. Нет единственного верного ответа.