Если вам нужно что-то, что доступно прямо из коробки в JDK 1.5 или более поздней версии, рассматривали ли вы ScheduledExecutorService?
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html
Вы можете создать одно из них, опираясь наодин поток, использующий этот фабричный метод:
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor()
Существует также альтернативный фабричный метод, который принимает ThreadFactory в качестве аргумента.Это дает вам возможность настроить поток, который будет работать внутри ScheduledExecutorService.Например, вы можете вызвать Thread.setName, чтобы дать потоку более значимое имя.Это очень полезно для отладки приложения.Когда вы генерируете полный дамп потока, вы увидите свое собственное имя, прикрепленное к потоку, а не общее имя, автоматически присоединенное JVM.
В зависимости от необходимости, может быть также целесообразно вызвать Thread.setDaemon (true), чтобы этот поток не блокировал отключение JVM.
Кроме того, рекомендуется выполнить очистку любого ExecutorService после того, как вы покончили с ним, вызвав ExecutorService.shutdown или ExecutorService.shutdownNow.Без гарантированного вызова завершения работы (например, в блоке finally) в вашем приложении может появиться ошибка утечки потока.Из-за использования, которое вы описываете, маловероятно, что это вас укусит, но я всегда хотел бы подчеркнуть это, когда даю кому-то рекомендацию использовать ExecutorService.Это легко упустить из JavaDocs.