FYI, jdk7 provides a method on ScheduledThreadPoolExecutor, setRemoveOnCancelPolicy(boolean), that properly handles cancellation.