能够获得Future <T>对象的进度

Mar*_*tus 14 java concurrency future progress swingworker

参考java.util.concurrent包和Future接口,我注意到(除非我弄错了)启动冗长任务并能够查询进度的能力仅来自SwingWorker实现类.

这引出了以下问题:

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

Mat*_*att 5

显然,Future对象只对阻塞然后接收结果有好处.

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

这意味着您有3个线程在运行.1表示实际工作,1表示在等待结果时被阻止,1表示监视线程.最后一个可以根据您的要求共享.