java - 获得 Future<T> 对象的进度的能力

标签 java concurrency future progress swingworker

关于 java.util.concurrent 包和 Future 接口(interface),我注意到(除非我弄错了)只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度。

这引出了以下问题:

有没有办法在非 GUI、非 Swing 应用程序(想象一个控制台应用程序)中在后台启动一个冗长的任务并允许其他线程检查进度?在我看来,没有理由将此功能限制在 swing/GUI 应用程序中。否则,在我看来,唯一可用的选项是通过 ExecutorService::submit 返回一个 Future 对象。但是,基础 Future 接口(interface)不允许监控进度。

最佳答案

显然,Future 对象只适用于阻塞然后接收结果。

您提交的 Runnable 或 Callable 对象必须知道如何提供此进度(完成百分比、尝试次数、状态(枚举?)等)并将其作为对对象本身的 API 调用提供,或发布在某些查找资源中(如有必要,在内存映射或数据库中)。为简单起见,我倾向于喜欢对象本身,尤其是因为您很可能需要句柄 (id) 来查找对象或对对象本身的引用。

这确实意味着您有 3 个线程在运行。 1 个用于实际工作,1 个用于等待结果,1 个用于监视线程。最后一个可以根据您的要求共享。

关于java - 获得 Future<T> 对象的进度的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275816/

相关文章:

java - 如何在 Play 模板中翻译#{get 'title'/}?

scala - 从 Scala 中的 Future Options 获取 Future 对象

java - CompletableFutures 的 Future 上的 get 方法

java - 通用类型转换

java - openfire smack 库

java - sonarqube 的 docker 镜像可以使用 env 来配置任何设置吗?

java - 执行器服务和巨大的IO

java - 纯线程安全的 Java 类

concurrency - 我什么时候应该在 Go 中使用并发?

python-3.x - 如何访问Gathering Future完成结果里面的数据