我正在使用支持 ScheduledExecutorService 为调度程序开发 API。基本设计,是你向调度器注册一个 Provider 实例,调度器为每个注册的 Provider 维护 ScheduledFuture。Provider 本质上是一个 Runnable,它知道如何检索触发任务。
我遇到的问题是取消预定的未来时该怎么办。取消 ScheduledFuture 的 API 采用布尔参数,允许中断正在触发的 Provider。我认为在 Provider 被杀死时提醒它以及该参数的值是有意义的,因此它可以进行任何必要的清理。
但是,如果您在取消其 ScheduledFuture 之前警告 Provider 实例它正在被杀死,则 Provider 实例可能会通过阻塞来破坏 API,直到它完成执行,而不管该参数的值如何。
另一方面,如果在该值设置为 true 的情况下调用 cancel 并且 ScheduledFuture 在让 Provider 实例知道它被杀死之前被取消,它可能会失去对其执行任何操作的机会。
注意:由于项目的要求,我不能使用 Quartz。否则我只会使用它。请不要回复告诉我使用替代框架,因为我的问题是关于 API 设计的。
有任何想法吗?