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