如何保存ThreadPoolExecutor的队列,以便重启后可以恢复?

时间:2015-12-24 00:58:43

标签: java spark-java

我正在尝试使用Spark(网络框架)开发应用,我需要在后台处理一些内容(异步),因此我不会阻止用户。< / p>

为此,我考虑使用ThreadPoolExecutor。有没有办法保存队列并在以后恢复? (当队列中仍有项目时,可能会停止/重新启动应用程序。)

另外,您如何向用户报告进度(待处理,进行中,已完成)?

基本上我正在寻找的是Celery,但对于Java而言,它需要嵌入我的应用程序中,因此用户不需要安装其他服务。

1 个答案:

答案 0 :(得分:1)

ThreadPoolExecutor类提供了一个名为getQueue()的方法,用于公开队列。

在旧的执行程序关闭之后,您应该能够重新创建新的执行程序时重用队列对象(及其内容)。

另一种可能性是使用自定义队列类来实现执行程序挂起/恢复,这可以导致在外部阻塞和解除阻塞。这样做的好处是,当您暂停和恢复执行程序时,不需要销毁/重新创建池线程。