java – 在Future对象上获得进度的能力

参考 java.util.concurrent包和Future接口,我注意到(除非我是错误的),启动漫长的任务并能够对进度进行查询的功能只能与SwingWorker实现类一起使用.

这就产生了以下问题:

有没有一种方法,在非GUI,非Swing应用程序(成像控制台应用程序)中,在后台启动漫长的任务,并允许其他线程检查进度?在我看来,没有理由将这种能力限制在swing / GUI应用程序中.否则,唯一可用的选项,我看到的方式是通过ExecutorService :: submit,它返回一个Future对象.但是,“未来”界面不允许监视进度.

解决方法

显然,未来的对象只会阻挡并接收结果.

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

这的确意味着你有3个线程操作. 1为实际工作,1为等待结果时被阻塞,1为监视线程.最后一个可以根据您的要求共享.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...