Для одного, конечно, не страшно. Как вариант, посмотреть ScheduledThreadPoolExecutor -- это не требует сторонних библиотек. Другие варианты -- clojure.core.async и manifold
sleep просто уступает машинное время другим тредам, но сам тред при этом занят, его нельзя занять чем-то другим
короче да, мы говорим об одном и том же, если тебе нужно назначать много асинхронных задач - то целесообразно использовать пул. Но если речь идет о 2-3 потоках - то смысла заморачиваться особо нет
ну да, просто надо понимать что это не супер такой ценный ресурс - их в современных ОС тысячи - это не то же самое как ты бы ядро отщипнул если без Thread.sleep