java - 有没有办法像在 ExecutorCompletionService 中那样在 spring 中轮询一组 Future 对象?

标签 java spring concurrency

我正在使用 @Async我的一个函数上的注释,该函数返回 Future<integer>目的。 该方法被调用几次,结果放在一个列表中。有没有办法以类似于 ExecutorCompletionService.take() 的方式轮询该列表?有用吗?

因为我使用的是 spring,所以我没有传递给 ExecutorCompletionService ctor 的执行器。

最佳答案

好吧,我还没有找到字符串提供的东西,所以我实现了自己的东西(非常欢迎评论):

public class CompletionService<V> {

    private List<Future<V>> results;
    private static boolean loop = true;

    public CompletionService(List<Future<V>> results) {
        this.results = results;
    }

    public Future<V> take() {

        Future<V> retval = null;
        int i = -1;

        while (loop) {
            for (i = 0; i < results.size(); i++) {
                if (results.get(i).isDone()) {
                    retval = results.get(i);
                    abortTake();
                    break;
                }
            }
        }

        //remove task only if it is done
        if (i > -1 && results.get(i).isDone()) {
            results.remove(i);
        }
        resetLoop();
        return retval;
    }

    public synchronized void abortTake() {
        loop = false;
    }

    private synchronized void resetLoop() {
        loop = true;
    }

}

关于java - 有没有办法像在 ExecutorCompletionService 中那样在 spring 中轮询一组 Future 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6612471/

相关文章:

java - Java Spring MVC 中的日志记录错误

java - 使用 Spring Security 进行身份验证后,SecurityContextHolder.getPrincipal() 返回 AnonimousUser

java - HashMap 上的双重检查锁定 - 线程安全?

java - 为什么通过引用比较整数 (==) 有效?

java - 如何在诺基亚asha sdk1.0中使textArea可滚动

为 glob 或类似 Ant 的模式 "*foo/**/*.txt"返回 List<File> 的 Java 库?

java - Spring 应用程序无法使用 ActiveJDBC 检测类启动

haskell - 找出多个互斥的、可能不终止的 Bool 中的哪一个是 True

java - 使用 java 线程间在控制台中进行文件传输

java errorlistener 在转换器实例上的使用(jaxp)