Если вы находитесь в среде Java EE, использование Runnable неплохо - но управление собственными потоками обычно так. Там вам гораздо лучше использовать MDB и позволить контейнеру обрабатывать параллельные сообщения.
За пределами Java EE иметь прослушиватели, реализующие Runnable, не является ужасной идеей - часто это не очень необходимо, так как в большинстве случаев регистрация позаботится о потоке. Я бы сказал, чтобы не беспокоиться об этом, если вы не видите реальной проблемы.