终止未来并获得中间结果

时间:2015-06-25 16:50:49

标签: java multithreading scala concurrency akka

我有一个长期运行的Scala Future,其操作如下:

  1. 计算初始结果
  2. 改善结果
  3. 如果没有改善则终止,否则转到2
  4. 在收到外部信号后(意味着Future将不知道它应该运行多长时间),我希望能够告诉Future终止并给我中间结果。我可以使用某种旁边通道来做到这一点(注意:这是一个使用Akka的Java程序,因此我在Java中创建了Scala未来以及所有随附的样板文件):

    public void doCalculation(AtomicBoolean interrupt, AtomicReference output) {
        Futures.future(new Callable<Boolean>() {
            public Boolean call() {
                Object previous = // calculate initial value
                output.set(previous);
                while(!interrupt.get()) {
                    Object next = // calculate next value
                    if(/* next is better than previous */) {
                        previous = next;
                        output.set(previous);
                    } else return true;
                }
                return false;
            }
        }, TypedActor.dispatcher());
    }
    

    这样,无论是谁调用doCalculation,都可以通过output获取中间值,并可以通过Future终止interrupt。但是,我想知道是否有办法在不诉诸辅助渠道的情况下做到这一点,因为这会让其他人难以维护我的代码。我们正在使用Java 7。

0 个答案:

没有答案
相关问题