我在Java中有一个解决问题的标准机制:
- 必须安排工作项在特定时间执行
- 每个工作项都必须等待条件变为真
- 工作项应该是可取消的
我的解决方案如下:
- 有一个单线程调度程序来安排我的工作项
- 有一个ExecutorService(可以是多线程的)
- 然后,每个计划的工作项将实际工作提交给ExecutorService。返回的Future被缓存在映射中。完成服务用于在完成工作时从缓存中删除未来
- 可以通过缓存的futures取消项目
当然,我的执行程序需要至少与我预期拥有的阻塞工作项一样大,但在实践中这不是问题。
现在我正在使用Scala并使用actor框架进行编码。假设我的工作项可以封装在发送到actor的事件中:
- 我将使用什么机制安排特定时间的工作项?
- 如果工作项是发送到actor的事件,如何确保后备线程池比同时阻塞的项目数量更大
- 如何导致先前安排的工作项被取消?