JDK предлагает класс Timer.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Timer.html
Чтение документации ясно указывает на то, что, помимо сантехники, чтобы сделать это обобщенной структурой, она не использует ничего более сложного, чем вызов Object.wait (timeout):
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait(long)
Итак, вы, вероятно, можете прекратить погоню, просто воспользовавшись Object #, подождите сами.
Помимо этих соображений, факт остается фактом, что JVM не может гарантировать точность времени на разных платформах. (Прочитайте документы на http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#currentTimeMillis())
Я думаю, вам нужно будет поэкспериментировать с компромиссным решением, сочетающим таймер и опрос занятости, если вы хотите добиться максимальной точности синхронизации на вашей платформе. Фактически объект # wait (1) -> System # nanoTime -> вычисление дельты -> [цикл при необходимости].
Если вы готовы развернуть свой собственный, JNI в значительной степени оставляет его открытым для решений для конкретных платформ. Я блаженно не осведомлен о внутренностях Windows, но, очевидно, если хост-операционная система действительно обеспечивает достаточно точные службы таймера в реальном времени, базовая структура настройки собственной библиотеки timerRequest (timedelta, callback) не должна быть недосягаемой.