Я бы использовал sleep () только в том случае, если нет никакой работы. Например, если вы делаете что-то вроде периодического опроса очереди задач и там ничего нет, поспите некоторое время, затем проверьте снова и т. Д.
Если вы просто пытаетесь убедиться, что процессор не перегружен, но все еще выполняете реальную работу, вы можете периодически вызывать Thread.yield (). Это откажется от управления процессором и позволит другим потокам работать, но это не усыпит вас. Если другим процессам не нужен процессор, вы вернете контроль и продолжите выполнять свою работу.
Вы также можете установить свой поток с низким приоритетом:
myThread.setPriority (Thread.MIN_PRIORITY);
Как сказал Измаил, не делайте этого в своей основной теме. Вместо этого создайте «рабочий поток». Таким образом, ваш пользовательский интерфейс (GUI или CLI) будет по-прежнему отзывчивым.