CompletableFuture重复使用

时间:2015-06-20 21:23:37

标签: java multithreading completable-future

根据Java 8: Definitive guide to CompletableFuture,CompletableFuture对象只能完成一次。当我发现它时,我有一个简单的界面:

public interface Synchronizable<E> {

    CompletableFuture future = new CompletableFuture();

    default E waitFor() throws InterruptedException, ExecutionException {
        return (E) future.get();
    }

    default E waitFor(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return (E) future.get(timeout, unit);
    }

    default void complete(E o) {
        future.complete(o);
    }

    default void complete() {
        complete(null);
    }

}

为了让线程能够调用waitFor(),它会等到另一个线程调用complete()

显然它不起作用。第一次这样的循环发生时,第二次正常工作;在一个完全不同的类上,它不会等待,并且CompletableFuture类的complete()方法返回false。

所以我想,好吧它只能完成一次所以为什么不创建一个新的实例来“重置”呢?我只会使用一次该值。这不起作用。事实上,它完全打破了。当我尝试创建一个新实例时,我的程序陷入死锁!

本文还讨论了在不完成未来的情况下传递值的方法(obtrudeValue())。我尝试了这个,但结果与complete()方法相同。

我能做些什么来防止这种情况或替代方案具有我想要的功能吗?

0 个答案:

没有答案