class ThreadMonitor {

    public void watchScheduledThread(final ScheduledExecutorService scheduledService,
                                     final Runnable runnable,
                                     final long delay,
                                     final long duration,
                                     final TimeUnit timeUnit) {
        Reject.ifNull(scheduledService, runnable);
        workPool.submit(new WatchDog(new StartThread() {
            public Future<?> start() {
                return scheduledService.scheduleAtFixedRate(runnable, delay, duration, timeUnit);
            }

            @Override
            public String toString() {
                return MessageFormat.format(
                        "ScheduledExecutable: {0} (start:{1} duration:{2} TimeUnit:{3}",
                        runnable.toString(),
                        delay,
                        duration,
                        timeUnit.toString());
            }
        }));
    }

    @Inject public  ThreadMonitor(ExecutorService workPool,
                         ShutdownManager shutdownManager,
                         @Named(SharedGuiceModule.DEBUG_THREAD_MANAGER) Debug debug);

}