我正在尝试使用Spark(网络框架)开发应用,我需要在后台处理一些内容(异步),因此我不会阻止用户。< / p>
为此,我考虑使用ThreadPoolExecutor。有没有办法保存队列并在以后恢复? (当队列中仍有项目时,可能会停止/重新启动应用程序。)
另外,您如何向用户报告进度(待处理,进行中,已完成)?
基本上我正在寻找的是Celery,但对于Java而言,它需要嵌入我的应用程序中,因此用户不需要安装其他服务。
答案 0 :(得分:1)
ThreadPoolExecutor
类提供了一个名为getQueue()的方法,用于公开队列。
在旧的执行程序关闭之后,您应该能够重新创建新的执行程序时重用队列对象(及其内容)。
另一种可能性是使用自定义队列类来实现执行程序挂起/恢复,这可以导致在外部阻塞和解除阻塞。这样做的好处是,当您暂停和恢复执行程序时,不需要销毁/重新创建池线程。